【发布时间】:2016-04-13 13:12:09
【问题描述】:
我正在尝试在我的表卖家和商品之间建立一种关系,其中每个卖家都可以出售任意数量的商品,但他们不能两次出售相同的商品。这是我所拥有的:
sells = db.Table('sells',
db.Column('seller_email', db.String(), db.ForeignKey('seller.email'), primary_key=True),
db.Column('item_id', db.Integer, ForeignKey('item.id'), primary_key=True)
)
class Item(db.Model):
__tablename__ = 'item'
id = db.Column(db.Integer, primary_key=True)
coverPhoto = db.Column(db.String())
price = db.Column(db.Integer)
condition = db.Column(db.Integer)
title = db.Column(db.String())
def __init__(self, title, coverPhoto, price, condition):
self.coverPhoto = coverPhoto
self.price = price
self.condition = condition
self.title = title
def __repr__(self):
return '<id {}>'.format(self.id)
class Seller(db.Model):
__tablename__ = 'seller'
email = db.Column(db.String(), primary_key=True)
password = db.Column(db.String())
firstName = db.Column(db.String())
lastName = db.Column(db.String())
location = db.Column(db.String())
def __init__(self, email, password, firstName, lastName, location):
self.email = email
self.password = password
self.firstName = firstName
self.lastName = lastName
self.location = location
def __repr__(self):
return "<Seller {email='%s'}>" % (self.email)
我收到以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) there is no unique constraint matching given keys for referenced table "seller"
[SQL: '\nCREATE TABLE sells (\n\tseller_email VARCHAR NOT NULL, \n\titem_id INTEGER NOT NULL, \n\tPRIMARY KEY (seller_email, item_id), \n\tFOREIGN KEY(item_id) REFERENCES item (id), \n\tFOREIGN KEY(seller_email) REFERENCES seller (email)\n)\n\n']
Bother Seller.email 和 item.id 是主键,所以它们本身不应该是唯一的吗?
【问题讨论】:
-
是的,主键本质上是唯一的。我不了解 SQLAlchemy,但在 SQL 数据库创建脚本中,关系表的定义需要遵循其他两个的定义。如果将
sells =部分移到脚本的末尾会有所不同吗?
标签: python sql postgresql flask sqlalchemy