我有一个简单的作者书籍模型,无法找到一种方法使firstName和lastName成为一个组合键并在关系中使用它。有什么想法吗?
from sqlalchemy import create_engine, ForeignKey, Column, String, Integer
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('mssql://user:pass@library')
engine.echo = True
session = sessionmaker(engine)()
class Author(Base):
__tablename__ = 'authors'
firstName = Column(String(20), primary_key=True)
lastName = Column(String(20), primary_key=True)
books = relationship('Book', backref='author')
class Book(Base):
__tablename__ = 'books'
title = Column(String(20), primary_key=True)
author_firstName = Column(String(20), ForeignKey('authors.firstName'))
author_lastName = Column(String(20), ForeignKey('authors.lastName'))
问题是,您已经将每个依赖列分别定义为外键,如果这不是您真正想要的,那么您当然需要一个复合外键。Sqlalchemy对此的回应是(以一种不太清楚的方式),它无法猜测要使用哪个外键(
firstName
或lastName
)。声明复合外键的解决方案在声明性方面有点笨拙,但仍然相当明显:
这里重要的是
ForeignKey
定义从各个列中消失,并且ForeignKeyConstraint
被添加到__table_args__
类变量中。有了这个,在Author.books
上定义的relationship
工作正常。相关问题 更多 >
编程相关推荐