使用数据库反射手动为现有数据库创建ORM有哪些优缺点?
我正在使用SQLAlchemy编写一些代码来访问预先存在的数据库。我知道我可以使用sqlalchemy.ext.automap
自动反映架构并创建映射。
但是,我想知道手动创建映射类是否有任何重大好处,而不是让自动化做出它的魔力。
如果有显着的好处,SQLAlchemy可以自动生成像Django' inspectdb
这样的python映射类吗?这将使得创建所有声明性基本映射的速度更快,因为我只需要验证和调整而不是从头开始编写。
编辑:
正如@iuridiniz在下面所说,有一些解决方案可以模仿Django的inspectdb
。见Is there a Django's inspectdb equivalent for SQLAlchemy?。该主题中的答案与Python3不兼容,因此如果您正在寻找实际维护的内容,请查看sqlacodegen或flask-sqlacodegen。
答案 0 :(得分:0)
我看到很多用CREATE TABLE suppliers
AS (SELECT * FROM companies WHERE 1 = 2 );
创建的表,(一个穷人的表副本),它没有主键。如果现有表没有主键,则必须不断捕获异常并将Column
个对象提供给映射器。如果你有方便的列对象,你已经有一半编写自己的ORM层了。如果您刚刚完成ORM,则不必担心表是否设置了主键。