【问题标题】:sqlautocode : primary key required in tables?sqlautocode:表中需要主键?
【发布时间】:2011-02-15 12:11:56
【问题描述】:
这与 SQLAlchemy 和 sqlautocode 中的主键约束有关。
我有 SA 0.5.1 & sqlautocode 0.6b1
我有一个没有主键的 MySQL 表。
sqlautocode 吐出“无法组装任何主键列”的回溯。
我可以用一个补丁来纠正这个问题,以便它反映没有主键的表吗?
谢谢,
维内特·迪奥达尔
【问题讨论】:
标签:
python
web-applications
turbogears
turbogears2
【解决方案1】:
我不这么认为。 ORM 如何在没有任何方法唯一标识记录的情况下将对象持久保存到数据库中?
但是,大多数 ORM 都接受一个 primary_key 参数,因此如果它没有在数据库中显式定义,您可以指定该键。
【解决方案2】:
如果基础表上存在唯一标识它的列组合,我们就成功地伪造了 sqa。
如果这是您自己的表并且您不在现场,请添加主键整数列或其他内容。
我们甚至能够在 a) 没有 pk 和 b) 没有代理其他列中的主键的情况下映射数据库中的现有旧表。是 Oracle 而不是 MySQL,但我们能够破解 sqa 以将 Oracle 的 rowid 视为 pk,尽管这仅对插入和查询是安全的……更新是不可能的,因为它无法唯一地识别应该更新的行。但这些都是丑陋的黑客,所以如果你能帮助它,不要走那条路。
【解决方案3】:
如果问题是 sqlautocode 不会生成您的类代码,因为它无法确定表的 PK,那么您可能能够更改该代码以满足您的需求(即使这意味着生成的 SQLA 代码不会'没有PK)。最终,如果您使用 SQLA 的 ORM 端,您将需要定义为 PK 的字段,即使数据库没有明确标记它们。