0
因此,由於[原因],我正在重寫由pyscopg2設置的tzinfo類。我想想到這將是一個簡單的例子,覆蓋cursor
類tzinfo_factory
。但是,這似乎並不奏效。如何在遊標上覆蓋psycopg2 tzinfo_factory
import psycopg2
from psycopg2.extensions import cursor
from psycopg2.tz import FixedOffsetTimezone
class MyFixedOffsetTimezone(FixedOffsetTimezone):
pass
class MyCursorFactory(cursor):
tzinfo_factory = MyFixedOffsetTimezone
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
conn = psycopg2.connect('', cursor_factory=MyCursorFactory)
cursor = conn.cursor()
cursor.execute("select now()")
results = cursor.fetchall()
print(results[0][0].tzinfo)
print(results[0][0].tzinfo.__class__)
還是會給予你
$ python3 example.py
psycopg2.tz.FixedOffsetTimezone(offset=60, name=None)
<class 'psycopg2.tz.FixedOffsetTimezone'>
這是我如何C實現的成員和上級蟒蛇互動的根本誤解的結果? (還是我是一個完整的pleb?)版本:python 3.5.2
在psycopg2 2.6.2
測試2.7.1
我已經通過代碼拖網,並且它似乎光標(psycopg/typecast_datetime.c被引用tzinfo_factory
:typecast_PYDATETIME_cast線140 @ 2.7.1)
tzinfo_factory = ((cursorObject *)curs)->tzinfo_factory;
(我修復了cursor_factory缺少的passthrough,然後複製了另一個版本的示例。我已經在我的例子中解決了這個問題,因爲它不是真正的問題,並且在編寫我的示例時出現錯誤。) 這確實解決了這個問題,但是您知道它爲什麼解決它嗎?爲什麼將'tzinfo_factory'設置爲類屬性不起作用,但將其設置爲實例屬性呢? –
這只是一個假設,我從未見過使用類屬性的psycopg2(以及cx_Oracle)。 –