sqlalchemy - sqlalchemy 一对一关系实例
问题描述
我是 sqlalchemy 的新手。我阅读了很多指南,但未能重现。我需要建立一对一的关系,但我失败了(每个用户都有一个相关的元表来区分数据和信息)。这是我当前损坏的代码。
class UserData(Base):
__tablename__ = "users"
user_id = Column(Integer, primary_key=True, index=True)
age = Column(Integer, index=True)
first_name = Column(String, index=True)
last_name = Column(String, index=True)
country = Column(String, index=True)
city = Column(String, index=True)
comment = Column(String, index=True)
users_meta = relationship("UserMeta", uselist=False, back_populates="users")
class UserMeta(Base):
__tablename__ = "users_meta"
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
user_id = Column(Integer, ForeignKey('users.user_id'))
users = relationship("UserData", back_populates="users")
解决方案
代码几乎是正确的,它需要两个更改:
UserMeta
需要一个主键列id = Column(Integer,primary_key=True)
中的关系定义
UserMeta
应该引用不存在UserData
的users_meta
属性,而不是。users
users = relationship("UserData", back_populates="users_meta")
一个小问题 - 不需要index=True
in UserData.id
,主键将被自动索引。
推荐阅读
- python - 终止调用gdal函数的python线程
- python - Same repeated output for loop in Python 3.6
- java - Hibernate 5 Multitenancy DATABASE appraoch:面临关闭 hikari 连接池的问题
- python - Unittest - 比较没有顺序的列表列表
- c++ - 对象更改时,运算符<<不能在同一行输出
- java - Why does my first Hello World Java program give an error on Visual Studio when using System.out to print to screen?
- android - Android Recyclerview Remove Animation 应用于所有项目奇怪的行为
- javascript - 从本地文件中删除/编辑 HTML 标签
- powershell - 更新了如何编辑我的脚本以将附加字段导入 mailchimp
- reactjs - React 在创建上下文时说:“找不到命名空间......”