python - 如何在 SQLAlchemy Alembic 迁移中更新记录?

标签 python mysql sqlalchemy database-migration alembic

我正在为我的 SQLAlchemy 应用程序编写数据库迁移脚本。 下面的迁移有效。但它实际上并没有做任何事情(还!):

 1: from alembic import op
 2: import sqlalchemy as sa
 3: 
 4: def upgrade():
 5:     my_table = sa.Table('my_table',
 6:                           sa.MetaData(),
 7:                           sa.Column('my_id', sa.Integer, primary_key=True),
 8:                           sa.Column('my_attribute1', sa.Text(), nullable=True),
 9:                           sa.Column('my_attribute2', sa.String(length=128), nullable=True))
10:
11:
12: connection = op.get_bind()
13: for my_record in connection.execute(my_table.select()):
14:     x = my_record.my_id
15:     print x

我想修改上述迁移以执行以下操作,但我不知道如何操作:

  • 在第 13 行中,我只想选择 my_attribute1 == 'Hello' 的记录
  • 在第 15 行中,我不想执行打印语句,而是更新 my_record,将 my_attribute2 设置为 my_attribute1[:10] + 'Goodbye '

我该怎么做?当我尝试使用 where 子句进行选择和更新时,它们不起作用。 manual没有多大帮助。

最佳答案

在迁移中绕过 ORM 并执行类似的操作会更安全

connection = op.get_bind()
connection.execute("UPDATE my_table SET my_attribute2 = SUBSTRING(my_attribute1, 0, 10) + 'Goodbye' WHERE my_attribute1 = 'Hello'")

我假设这只是一个示例,您将做一些不同的事情,因为否则,您不需要采用 my_attribute1 的子字符串,因为它对于这些记录始终具有相同的值“Hello”。

关于python - 如何在 SQLAlchemy Alembic 迁移中更新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43359406/

相关文章:

python - 如何在 GdkPixbuf.Pixbuf 上渲染文本

python - 为什么我在python中检测YOLO网络摄像头对象时遇到此错误?

php - 查询以检索列名称中存储变量的数据

java - 数据库中的循环与应用程序中的循环

python - Flask-SQLAlchemy 查询多对多

python - 绑定(bind)到 Enter 的 Tkinter 按钮立即执行

php - 我如何显示来自mysql特定月份的数据

python - 如何使用新的主键克隆 SQLAlchemy 对象

python - Order by 可以与模型中的属性一起使用吗?

python - 仅在一个窗口中显示更新图像