python - 我可以在 SQLAlchemy 中添加一个基于另一个数据库行的新项目吗?

标签 python mysql sqlalchemy flask-sqlalchemy

如标题所示,我想在 SQLALchemy 中添加一个具有基于另一行的 ID 的行。目前,我正在添加一个额外的 select,但我想摆脱它。我知道这在 MySQL 中是可能的,所以我只是想弄清楚 SQLAlchemy 的版本。这是我目前拥有的:

keywords = ['a', 'b', 'c']
prefix_id = session.query(Prefix.id)\
    .filter_by(name=some_prefix).first()[0]
inventory_item = InventoryItem(
    item=some_item, prefix_id=prefix_id, address=some_address)
inventory_item_metas = [InventoryItemMeta(
    inventory_item=inventory_item,
    type='keyword',
    value=keyword) for keyword in keywords]

请注意,我正在根据返回的 ID 添加更多项目,因此我希望尽可能高效地在一个事务中完成所有操作。

最佳答案

如果 i0 是您要复制的对象,您可以将其从 session 中删除以使其成为 transient :

i0 = select
session.expunge(i0)

然后将它的 id 设置为 None 以便它不再引用任何真实的数据库行:

i0.id = None

然后就可以修改对象了:

i0.a = 1
i0.b = 2

最后,您将 transient 对象添加回 session 并刷新它以获得新的 id:

session.add(i0)
session.flush()

您会发现该对象现在是一个新行:

print i0.id #New ID

如果您通过旧 ID 查找内容,您将得到另一个与更改前相同的对象,也具有原始 ID。

关于python - 我可以在 SQLAlchemy 中添加一个基于另一个数据库行的新项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494997/

相关文章:

Python 两个函数的线程

php - 安全的 Mysqli 语句以避免 SQL 注入(inject),但表单仅发送空白信息

python - MySQL 拒绝远程连接

python - 如何使用 Python 从 Sybase 数据库在 SQLAlchemy 中执行表反射/自省(introspection)?

python - 如何将结果存储到python中的csv文件中

python - 选择并合并 pandas 数据框(日期)

python - 仅使用日期从cassandra中删除记录

mysql - 如何在没有工作台的情况下将 .mwb 转换为 .sql

mySQL 联合计算行

python - 我正在尝试使用 pandas 和 sqlalchemy 将数据加载到 redshift 中