您好我想知道是否有人知道找出列是否具有foreignKey关系的最有效方法。
class StudentIntendCourse(DeclarativeBase):
__tablename__ = 'studentIntendCourse'
id = Column(Integer, primary_key=True)
studentID = Column('studentID',Integer,ForeignKey('student.id'))
courseID = Column('courseID',Integer,ForeignKey('course.id'))
course = relationship("Course",backref="studentIntendedCourses")
我想知道是否is_foreign_key(StudentIntendCourse.studentID)?
答案 0 :(得分:3)
与该单个ForeignKey
对象相关联的Column
个对象位于该列的foreign_keys集合中。
foreign_keys_set = StudentIntendCourse.__table__.c.studentID.foreign_keys
您可以检查此设置是否为非空
答案 1 :(得分:0)
我有类似的问题。实际上,我没有表对象,但是有表名和类似的列名。这是我的解决方案:
from sqlalchemy.schema import MetaData
from sqlalchemy import create_engine
engine = create_engine( URL )
meta = MetaData()
meta.reflect(bind=engine)
def is_foreign_key(table_name, col_name):
return col_name in [e.target_fullname for e in meta.tables[table_name].foreign_keys]
注意:
meta.tables[table_name].foreign_keys == Table.__table__.foreign_keys
答案 2 :(得分:0)
所有列均具有属性“ foreign_keys”,该属性是一个集合,但对于不是ForeignKey的所有列均为空,因此简单的测试可以为您提供正确的答案。在您的示例中:
def is_foreign_key(column):
return True if column.foreign_keys else False
print(is_foreign_key(StudentIntendCourse.studentID))
如果要获取所有ForeignKey的列表:
from sqlalchemy.inspection import inspect
foreign_keys_list = [c.key for c in inspect(StudentIntendCourse) if getattr(StudentIntendCourse, c.key).foreign_keys]
我强烈建议使用inspection,而不是直接访问SQLAlchemy的嵌套结构。