python – 使用SQLAlchemy MetaData获取现有表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用SQLAlchemy MetaData获取现有表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2368字,纯文字阅读大概需要4分钟。
内容图文
我有一个已经存在的表:
USERS_TABLE = Table("users", META_DATA,
Column("id", Integer, Sequence("user_id_seq"), primary_key=True),
Column("first_name", String(255)),
Column("last_name", String(255))
)
我通过运行这个创建了这个表:
CONN = create_engine(DB_URL, client_encoding="UTF-8")
META_DATA = MetaData(bind=CONN, reflect=True)
# ... table code
META_DATA.create_all(CONN, checkfirst=True)
它第一次工作,我能够创建表.但是,第二次我遇到了这个错误:
sqlalchemy.exc.InvalidRequestError: Table 'users' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
这是有意义的,因为表用户已经存在.我能够看到表是否存在如下:
TABLE_EXISTS = CONN.dialect.has_table(CONN, "users")
但是,我如何实际获取现有的表对象?我在文档中的任何地方都找不到这个.请帮忙.
解决方法:
我们在这里有3种不同的方法:
>假设已经创建了所需的表,反映了它们并获得了MetaData.tables字典字段
from sqlalchemy import MetaData, create_engine
CONN = create_engine(DB_URL, client_encoding="UTF-8")
META_DATA = MetaData(bind=CONN, reflect=True)
USERS_TABLE = META_DATA.tables['users']
>从MetaData对象初始化中删除reflect标志,因为我们不使用它而且 – 尝试创建已经反映的表:
from sqlalchemy import MetaData, Table, Column, Integer, String, Sequence, create_engine
CONN = create_engine('sqlite:///db.sql')
META_DATA = MetaData(bind=CONN)
USERS_TABLE = Table("users", META_DATA,
Column("id", Integer, Sequence("user_id_seq"), primary_key=True),
Column("first_name", String(255)),
Column("last_name", String(255))
)
META_DATA.create_all(CONN, checkfirst=True)
>假设我们通过将Table对象初始化程序keep_existing标志设置为True来保留以前创建的反射表:
from sqlalchemy import MetaData, Table, Column, Integer, String, Sequence, create_engine
CONN = create_engine('sqlite:///db.sql')
META_DATA = MetaData(bind=CONN, reflect=True)
USERS_TABLE = Table("users", META_DATA,
Column("id", Integer, Sequence("user_id_seq"), primary_key=True),
Column("first_name", String(255)),
Column("last_name", String(255)),
keep_existing=True
)
META_DATA.create_all(CONN, checkfirst=True)
哪一个选择?取决于你的用例,但我更喜欢第二个,因为它看起来你没有使用反射,也是最简单的修改:只是从MetaData初始化器中删除标志.
P. S.
我们总是可以在使用MetaData.reflect方法初始化MetaData对象后进行反射:
META_DATA.reflect()
我们也可以指定用only参数反映哪些表(可以是str对象的任何iterable):
META_DATA.reflect(only=['users'])
内容总结
以上是互联网集市为您收集整理的python – 使用SQLAlchemy MetaData获取现有表全部内容,希望文章能够帮你解决python – 使用SQLAlchemy MetaData获取现有表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。