使用.__ table __。columns._data从列名中获取ForeignKey

时间:2018-01-30 08:57:21

标签: sqlalchemy

我想检索与给定列关联的外键;以下内容:

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'。

1 个答案:

答案 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