我想修改一些数据库数据作为alembic升级的一部分.
我以为我可以在迁移升级中添加任何代码,但以下操作失败:
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('smsdelivery', sa.Column('sms_message_part_id', sa.Integer(), sa.ForeignKey('smsmessagepart.id'), nullable=True))
### end Alembic commands ###
from volunteer.models import DBSession, SmsDelivery, SmsMessagePart
for sms_delivery in DBSession.query(SmsDelivery).all():
message_part = DBSession.query(SmsMessagePart).filter(SmsMessagePart.message_id == sms_delivery.message_id).first()
if message_part is not None:
sms_delivery.sms_message_part = message_part
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
sqlalchemy.exc.UnboundExecutionError: Could not locate a bind configured on mapper Mapper|SmsDelivery|smsdelivery, SQL expression or this Session
Run Code Online (Sandbox Code Playgroud)
我真的不明白这个错误.我该如何解决这个问题,或者这样的操作不可能?
我有oauth secret和oauth key在client表中.现在我将它们移动到oauth credentials将在迁移期间创建的表.Alembic生成以下架构进行升级.
from myapp.models import Client, ClientCredential
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('client_credential',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('updated_at', sa.DateTime(), nullable=False),
sa.Column('client_id', sa.Integer(), nullable=False),
sa.Column('key', sa.String(length=22), nullable=False),
sa.Column('secret', sa.String(length=44), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.ForeignKeyConstraint(['client_id'], ['client.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('key')
)
# Here I need to copy data from table A to newly created Table.
# …Run Code Online (Sandbox Code Playgroud)