【发布时间】:2011-02-10 18:28:13
【问题描述】:
我有一个 Pylons 项目和一个实现模式限定表的 SQLAlchemy 模型:
class Hockey(Base):
__tablename__ = "hockey"
__table_args__ = {'schema':'winter'}
hockey_id = sa.Column(sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True)
baseball_id = sa.Column(sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id'))
此代码在 Postgresql 上运行良好,但在表和外键名称上使用 SQLite 时失败(由于 SQLite 缺乏架构支持)
sqlalchemy.exc.OperationalError: (OperationalError) 未知数据库 "winter" 'PRAGMA "winter".table_info("hockey")' ()
我想继续使用 SQLite 进行开发和测试。
有没有办法在 SQLite 上优雅地失败?
【问题讨论】:
-
在您的开发和测试机器上使用 Postgres 有什么困难?
-
我会让您的设置更简单。从头到尾使用 Postgres。不要在 SQLIte 上测试并在 Postgres 上发布。
-
坚持使用 SQLite 可以简化工作流程,特别是对于 QA 人员,因为他们不必了解自己的测试数据库。随处使用 Postgres 是一个可靠的计划“B”
-
您是否尝试过使用
engine.execute("attach database '{db}' as winter;".format(db=_SL_FILE))来解决这个问题?顺便说一句,我同意 StarShip3000 关于 PostgreSQL 的评论。 -
@Chris:要将新创建的内存数据库附加到现有(内存或文件)数据库,只需运行
engine.execute("attach database ':memory:' as db_name;")。我不知道如何附加已经存在的内存数据库(将现有的基于文件的数据库附加到内存数据库没有问题)。所以你基本上必须改变创建顺序:首先附加内存数据库(创建一个新数据库),然后为这个新的内存数据库创建表并根据需要填充数据。
标签: sqlite postgresql schema sqlalchemy pylons