python - 是否有一个 ORM 结构允许我拥有导致 Catalog.Schema.Table 的表?
问题描述
我目前正在使用预先存在的数据库进行项目。Server是一个集群服务器,有多个Catalogs(数据库),每个Catalog里面有多个Schemas with Tables。传统 SQL 查询的表名格式为 [Catalog].[Schema].[Table]。这种结构适用于传统的 SQL。
当我尝试将烧瓶 db 迁移到 sqlite 数据库进行测试时,问题就出现了。根据我的尝试,我会遇到许多错误。
我在用
- 蟒蛇 3.7
- 烧瓶 1.0.2
- Flask-SQLAlchemy 2.4.0
- 烧瓶迁移 2.4.0
- Windows 10(不理想,但它是我所拥有的)
我尝试了以下不同的结果:
- 仅模式方法:
class User(db.Model):
__tablename__ = 'user'
__table_args__ = (
db.PrimaryKeyConstraint('userid')
, db.ForeignKeyConstraint(('manageruserid',), ['CatalogA.SchemaA.userid'])
, {'schema': 'CatalogA.SchemaA'}
)
manager_user_id = db.Column('manageruserid', db.Integer())
user_id = db.Column('userid', db.Integer(), nullable=False)
class Tool(db.Model):
__tablename__ = 'tool'
__table_args__ = (
db.PrimaryKeyConstraint('toolid')
, db.ForeignKeyConstraint(('ownerid',), ['CatalogA.SchemaA.user.userid'])
, {'schema': 'CatalogB.SchemaB'}
)
tool_id = db.Column('toolid', db.Integer())
owner_id = db.Column('ownerid', db.Integer(), nullable=False)
尝试升级时会产生错误:
"sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unknown database "CatalogA.SchemaA" [SQL: CREATE TABLE "CatalogA.SchemaA".user (
manageruserid INTEGER,
userid INTEGER NOT NULL,
PRIMARY KEY (userid),
FOREIGN KEY(manageruserid) REFERENCES user (userid) )"
- 绑定架构(绑定设置正确)
class User(db.Model):
__bind_key__ = 'CatalogA'
__tablename__ = 'user'
__table_args__ = (
db.PrimaryKeyConstraint('userid')
, db.ForeignKeyConstraint(('manageruserid',), ['CatalogA.SchemaA.user.userid'])
, {'schema': 'SchemaA'}
)
manager_user_id = db.Column('manageruserid', db.Integer())
user_id = db.Column('userid', db.Integer(), nullable=False)
class Tool(db.Model):
__bind_key__ = 'CatalogB'
__tablename__ = 'tool'
__table_args__ = (
db.PrimaryKeyConstraint('toolid')
, db.ForeignKeyConstraint(('ownerid',), ['CatalogA.SchemaA.user.userid'])
, {'schema': 'SchemaB'}
)
tool_id = db.Column('toolid', db.Integer())
owner_id = db.Column('ownerid', db.Integer(), nullable=False)
尝试迁移时会产生错误:
"sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'user.manageruserid' could not find table 'CatalogA.SchemaA.user' with which to generate a foreign key to target column 'userid'"
如果我使用 Schema only 方法,那么我可以在数据库上运行查询,但它没有正确设置我的 test-db。
我找了几个小时试图找到一个解决方案,并且希望有人能帮助我找到前进的方向(如果你找到另一个解决方案的链接,请告诉我你搜索了什么以增加我的 google-fu)。
主要问题是:
- 为这种情况建立模型的正确方法是什么?
- 在这种情况下我错过了/是否在文档中有什么东西?
解决方案
推荐阅读
- ruby - 如何在红宝石中使用数字作为符号
- python - 您必须使用 dtype float 和 shape [2,2] 为占位符张量“Placeholder”提供一个值
- sql - MERGE TVP + 更新记录时对列求和
- yii2 - 在 Yii2 中针对数据库中的哈希验证密码
- oracle - 通过从另一个中选择全部插入到表中,当语句为真时更改 PL/SQL 中的值
- python - 在 bqplot 图表中只得到一个条形图
- php - PHP PayPal API 更改
- gnuplot - 来自文件和参数球体的 gnuplot 曲线
- ruby-on-rails - 如何编写在每个 ActionDispatch::IntegrationTest 之前运行的基本设置和拆卸
- ios - 快速在uiimage中以正确的方式显示较小或较大的高度,宽度图像