我想检索与给定列关联的外键;以下内容:
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import relationship, backref
from sqlalchemy import ForeignKey
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
class File(Base):
__tablename__ = 'file'
id = Column(Integer, primary_key=True)
name = Column(String)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
file_id = Column(Integer, ForeignKey('file.id'))
myfile = relationship("File", backref="users", foreign_keys=file_id)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
print(User.__table__.columns._data)
我得到了我需要的东西,因为它打印出来
{'name': Column('name', String(), table=<users>), 'file_id': Column('file_id', Integer(), ForeignKey('file.id'), table=<users>), 'id': Column('id', Integer(), table=<users>, primary_key=True, nullable=False)}
除了我不知道如何检索信息,即如何 解析输出以知道列'file_id'具有外键'file.id'。
答案 0 :(得分:1)
您可以像这样检索ForeignKey:
[Class].[column_name].expression.foreign_keys
在您的情况下:
User.file_id.expression.foreign_keys.pop()
如果要获取外键的名称,首先需要将属性name
添加到file_id
。示例:
class User(Base):
...
file_id = Column(Integer, ForeignKey('file.id', name='user_file_id_fkey'))
然后您可以使用
User.file_id.expression.foreign_keys.pop().name