数据库关系 - 语法

时间:2013-12-12 18:53:43

标签: python database syntax sqlalchemy

关于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如何工作的基本原理,我不明白为什么我不得不问这个问题?谢谢!

2 个答案:

答案 0 :(得分:2)

relationship(Child)也有效。通过大写字母内部字符串,sqlalchemy将查找相应的模型。

关系不是sql标准,因此SQLAlchemy使用自己的约定,而ForeignKey是SQL Standard,因此使用tablename.column

答案 1 :(得分:2)

一般:在relationship级别定义orm,而ForeignKey代表数据库模型。现在,情况可能是sqlalchemy足够聪明,可以从另一个中找出,但如果你记住这种分离,那么你是安全的。

特别针对您的问题:只需阅读文档即可。提取下面(逐字)

  

参数 - 表示的映射类或实际的Mapper实例   关系的目标。

     

参数也可以作为可评估的可调用函数传递   在mapper初始化时,可以作为可评估的Python传递   使用Declarative时的字符串

  

- 关键关系的单个目标列。一栏   对象或列名作为字符串tablename.columnkey或   schema.tablename.columnkeycolumnkey是关键所在   分配给列(默认为列名称本身),除非   link_to_name为True,在这种情况下,列的呈现名称为   使用