说起外键(ForeignKey)大家应该都不陌生,这里说令一种关系relationship
他可以使用更简便的方式获取多层嵌套关系
# 这个是爷爷
from sqlalchemy.orm import relationship
class Grandpa(BaseTable, HasId):
id = Column(String(36)),
name = Column(String(36)),
# 这里对外键也举个例子
grandma_id = Column(String(36), ForeignKey('grandma.id', ondelter='CASCADE')),
# 这里的爷爷和父亲建立了relationship
father = relationship(Father, innerjoin=True, cascade='all,save-update,delete')
# 这个是父亲
class Father(BaseTable, HasId):
id = Column(String(36)),
name = Column(String(36)),
# 父亲已经与爷爷建立了relationship,他还可以与儿子建立其他的relationship
grandpa_id = Column(String(36)),
son = relationship(Son, innerjoin=True, cascade='all,save-update,delete')
# 这个是儿子
class Son(BaseTable, HasId):
id = Column(String(36)),
name = Column(String(36)),
father_id = Column(String(36))
此时查询数据库:
grandpa = cls.basic_select(name="yeye")
# 此时的father可以有很多个,每一个father都是一条father对象
father = grandpa.father
son = father.son
类似于这种对象的格式
连接数据库时有2种方式:
- socket:默认在my.cnf里有指定socket文件的位置,/tmp/mysql.sock (如果数据库是通过docker启动,可以通过建立软连接找到socket)
- tcp/ip:-h 127.1.1.1 -p 3306 -S /tmp/mysql.sock