У меня есть следующая таблица:
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
.
Ответ 1
Вы можете использовать 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)
Существуют и другие варианты:
Ответ 2
В большинстве сценариев имя столбца подходит для них.
Но, возможно, вы пишете код следующим образом:
class UserModel(BaseModel):
user_id = Column("user_id", INT, primary_key=True)
email = Column("user_email", STRING)
column.name "user_email", а имя поля - "электронная почта",
column.name не может работать как раньше.
Существует еще один трюк с использованием метакласса Python, пример кода:
sqlalchemy_base_model.py