我有一个类似于:
的sqlite数据库(来自iOS应用程序)CREATE TABLE ZSPL ( Z_PK INTEGER PRIMARY KEY, ZWHEN TIMESTAMP, ZWHEN2 real)
1, 492445270.121238, 492445270.121238
2, 492445270.871551, 492445270.871551
我希望构建一个Django(v1.10)模型来使用它following these docs:
APPLE_EPOCH = datetime(year=2001, month=1, day=1, hour=0, second=0)
def apple_time_to_datetime(apple_time):
if isinstance(apple_time, datetime):
return apple_time
return APPLE_EPOCH + timedelta(seconds=float(apple_time))
class AppleDateTimeField(models.DateTimeField):
def from_db_value(self, value, expression, connection, context):
return apple_time_to_datetime(value)
def to_python(self, value):
return apple_time_to_datetime(value)
class Spl(models.Model):
when = AppleDateTimeField(db_column='ZWHEN')
但是,由于转化器here注册的parse_datetime
尝试解析ZWHEN
中的数值,因此出现此错误。如果这些转换器已注释掉,那么dbapi2 convert_timestamp
函数here上会出现错误。
同样,当db_column='ZWHEN'
更改为db_column='ZWHEN2'
时,由于日期转换器在自定义转换器之前注册,因此会出错。您可以在this line上的conv
值中看到此内容。
我想知道是否还有解决此问题并且首先调用自定义from_db_value
转换器?
我暂时使用复制的ZWHEN2
代替ZWHEN
字段并编辑get_converters
函数来阅读:
converters[i] = (field_converters + backend_converters, expression)
而不是:
converters[i] = (backend_converters + field_converters, expression)
答案 0 :(得分:0)
这不是我正在寻找的答案,因为它涉及对Django库的更改,但至少它不涉及编辑源代码本身。
在与模型相同的文件中,我添加了以下行:
from django.db.backends.sqlite3.base import Database, decoder
Database.register_converter(str("timestamp"), decoder(apple_time_to_datetime))
Database.register_converter(str("TIMESTAMP"), decoder(apple_time_to_datetime))
似乎已经解决了#34;问题。