关于SQLAlchemy中涉及的语法的问题。
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
child_id = Column(Integer, ForeignKey('child.id'))
child = relationship("Child")
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
为什么是ForeignKey('child.id')而不是ForeignKey(“Child.id”)? 为什么是关系(“孩子”)而不是关系(“孩子”)?有关数据库和SQLAlchemy如何工作的基本原理,我不明白为什么我不得不问这个问题?谢谢!
答案 0 :(得分:2)
relationship(Child)
也有效。通过大写字母内部字符串,sqlalchemy将查找相应的模型。
关系不是sql标准,因此SQLAlchemy使用自己的约定,而ForeignKey是SQL Standard,因此使用tablename.column
。
答案 1 :(得分:2)
一般:在relationship
级别定义orm
,而ForeignKey
代表数据库模型。现在,情况可能是sqlalchemy
足够聪明,可以从另一个中找出,但如果你记住这种分离,那么你是安全的。
特别针对您的问题:只需阅读文档即可。提取下面(逐字)
relationship
:参数 - 表示的映射类或实际的Mapper实例 关系的目标。
参数也可以作为可评估的可调用函数传递 在mapper初始化时,可以作为可评估的Python传递 使用Declarative时的字符串。
列 - 关键关系的单个目标列。一栏 对象或列名作为字符串:
tablename.columnkey
或schema.tablename.columnkey
。columnkey
是关键所在 分配给列(默认为列名称本身),除非 link_to_name为True,在这种情况下,列的呈现名称为 使用