抱歉,如果这是一个新手问题,但有关多对一关系的文档似乎并未涵盖这一点。我一直在寻找与此类似的内容(在“如何向表中插入/添加数据”部分),但是在所示示例中,这始终是唯一的插入。
基本上,我想用本地机器上的数据填充我的数据库。为简单起见,我将下面显示的示例构建到说明问题的MWE中。该问题由两个名为Price
and的表组成,Currency
并且以声明式的方式完成了实现。
模型.py
from sqlalchemy import Column, Integer, String
from sqlalchemy import Float, BigInteger, ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Currency(Base):
__tablename__ = 'Currency'
id = Column(Integer, primary_key=True)
unit = Column(String(16), unique=True)
def __init__(self, unit):
self.unit = unit
class Price(Base):
__tablename__ = 'Price'
id = Column(BigInteger, primary_key=True)
currency_id = Column(Integer, ForeignKey("Currency.id"), nullable=False)
currency = relationship("Currency", backref="Currency.id")
hour1 = Column(Float)
hour2 = Column(Float)
def __init__(self, hour1, hour2):
self.hour1 = hour1
self.hour2 = hour2
目前,我正在使用以下代码填充数据库:
脚本.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from model import *
engine = create_engine('sqlite:///example.db', echo=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
session = db_session()
Base.metadata.create_all(engine)
oPrice = Price(2.5, 2.5)
oPrice.currency = Currency("EUR")
session.add(oPrice)
tPrice = Price(5.5, 1.5)
tPrice.currency = Currency("EUR")
session.add(tPrice)
session.commit()
这会产生错误
sqlalchemy.exc.IntegrityError: (IntegrityError) column unit is not unique u'INSERT INTO "Currency" (unit) VALUES (?)' ('EUR',)
填充我的数据库的最佳策略是什么,以确保我的 Currency.id 和 Price.currency_id 映射正确?我是否应该让模型类在初始化之前寻找唯一性,我是否应该与另一个表相关联?