我有下表:
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(255))
email = Column(String(255))
是否有可能获得一个字典,空记录将返回如下内容:
{'id': None, 'username': None, 'email': None}
如果我这样做:
user = User()
user.username = "testuser"
user.email = "test@example.com"
我希望能够获得具有相应值的字典。当然,如果我保存记录,我希望它也有id
。
答案 0 :(得分:4)
您可以使用user.__table__.columns
:
def get_model_dict(model):
return dict((column.name, getattr(model, column.name))
for column in model.__table__.columns)
用法:
user = User()
get_model_dict(user)
还有其他选择:
答案 1 :(得分:0)
在大多数情况下,列名适合它们。 但也许您编写如下代码:
class UserModel(BaseModel):
user_id = Column("user_id", INT, primary_key=True)
email = Column("user_email", STRING)
column.name“user_email”,而字段名称是“email”, column.name无法像以前那样运作良好。
使用Python元类还有另一个技巧,示例代码: