使用SQLAlchemy写入PostgreSQL时DateTime字段始终为NULL,求助排查
问题原因及修复方案
错误1:类属性与数据库字段不匹配
你的Foo类中定义的DateTime数据库字段是timestamp_of_csv_file,但在__init__方法里却给self.timestamp赋值——这个属性并未和数据库字段做映射绑定,SQLAlchemy不会将其写入数据库,导致该字段始终为NULL。
错误2:构造函数传参顺序颠倒
Foo的__init__方法参数顺序是lines在前、timestamp在后,但你实例化时传的是Foo(dt_m, count_lines),把时间戳和行数的顺序搞反了,即便属性名正确,数据也会错位。
修复后的代码
修正后的Foo类
class Foo(Base): __tablename__ = 'Foo' lines = Column("lines", Integer, primary_key=True) timestamp_of_csv_file = Column("timestamp_of_csv_file", DateTime) def __init__(self, lines, timestamp): self.lines = lines # 赋值给类中定义的数据库映射字段 self.timestamp_of_csv_file = timestamp
修正后的实例化代码
# 传参顺序与__init__参数一致:行数在前,时间戳在后 session.add(Foo(count_lines, dt_m)) session.commit()
修复后,PostgreSQL的INSERT语句会正确携带时间戳值,不会再出现NULL的情况。
内容的提问来源于stack exchange,提问作者saromba
相关产品推荐
相关产品推荐

