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)。 –