这与 SQLAlchemy 和 sqlautocode 中的主键约束有关。我有 SA 0.5.1 和 sqlautocode 0.6b1 我有一个没有主键的 MySQL 表。sqlautocode 吐出“无法组装任何主键列”的回溯。
我可以用一个补丁来纠正这个问题,以便它反映没有主键的表吗?
谢谢,Vineet Deodhar
这与 SQLAlchemy 和 sqlautocode 中的主键约束有关。我有 SA 0.5.1 和 sqlautocode 0.6b1 我有一个没有主键的 MySQL 表。sqlautocode 吐出“无法组装任何主键列”的回溯。
我可以用一个补丁来纠正这个问题,以便它反映没有主键的表吗?
谢谢,Vineet Deodhar
I don't think so. How an ORM is suposed to persist an object to the database without any way to uniquely identify records?
However, most ORMs accept a primary_key argument so you can indicate the key if it is not explicitly defined in the database.
如果问题是 sqlautocode 不会生成您的类代码,因为它无法确定表的 PK,那么您可能能够更改该代码以满足您的需求(即使这意味着生成没有 PK 的 SQLA 代码)。最终,如果您使用 SQLA 的 ORM 端,您将需要定义为 PK 的字段,即使数据库没有明确标记它们。
如果基础表上存在唯一标识它的列组合,我们就成功地伪造了 sqa。
如果这是您自己的表并且您不在现场,请添加主键整数列或其他内容。
我们甚至能够在 a) 没有 pk 和 b) 没有代理其他列中的主键的情况下映射数据库中的现有遗留表。是 Oracle 而不是 MySQL,但我们能够破解 sqa 以将 Oracle 的 rowid 视为 pk,尽管这仅对插入和查询是安全的……更新是不可能的,因为它无法唯一地识别应该更新的行。但这些都是丑陋的黑客,所以如果你能帮助它,不要走那条路。