diff --git a/alembic/versions/af63c0205b19_adding_library_id_foreign_key_to_user.py b/alembic/versions/af63c0205b19_adding_library_id_foreign_key_to_user.py index d5a24e4..b253b1a 100644 --- a/alembic/versions/af63c0205b19_adding_library_id_foreign_key_to_user.py +++ b/alembic/versions/af63c0205b19_adding_library_id_foreign_key_to_user.py @@ -3,54 +3,58 @@ Revision ID: af63c0205b19 Revises: 4cc89f2f896b Create Date: 2025-07-09 15:00:40.189587 + """ # revision identifiers, used by Alembic. revision = 'af63c0205b19' down_revision = '4cc89f2f896b' - from alembic import op import sqlalchemy as sa import json - + from sqlalchemy.dialects import postgresql def upgrade(): #with app.app_context() as c: # db.session.add(Model()) # db.session.commit() - + # ### commands auto generated by Alembic - please adjust! ### # Add foreign key constraint to users table op.add_column('users', sa.Column('library_id', sa.Integer(), nullable=True)) op.create_foreign_key(None, 'users', 'library', ['library_id'], ['id']) - bind = op.get_bind() # Get all users with link_server in user_data # Delete link_server from user_data # But save the link_server in the library table instead to be accessible via users.library_id - + users = bind.execute("SELECT id, user_data FROM users WHERE user_data ? 'link_server'") for user_id, user_data in users: - if user_data and isinstance(user_data, dict): link_server = user_data.get('link_server') if link_server: - library = bind.execute( - "SELECT id FROM library WHERE libserver = %s", (link_server,) + library_result = bind.execute( + "SELECT id FROM library WHERE libserver = %(libserver)s", + {"libserver": link_server} ).fetchone() - library_id = library[0] if library else None + library_id = library_result[0] if library_result else None new_user_data = user_data.copy() new_user_data.pop('link_server', None) + # Convert dictionary to JSON string for PostgreSQL bind.execute( - "UPDATE users SET user_data = %s, library_id = %s WHERE id = %s", - (new_user_data, library_id, user_id) + "UPDATE users SET user_data = %(user_data)s, library_id = %(library_id)s WHERE id = %(user_id)s", + { + "user_data": json.dumps(new_user_data), + "library_id": library_id, + "user_id": user_id + } ) def downgrade(): @@ -59,14 +63,20 @@ def downgrade(): bind = op.get_bind() result = bind.execute("SELECT u.id, u.user_data, l.libserver FROM users u JOIN library l ON u.library_id = l.id WHERE u.library_id IS NOT NULL") - + for user_id, user_data, libserver in result: user_data = user_data or {} if isinstance(user_data, dict): if libserver is not None: user_data['link_server'] = libserver - bind.execute("UPDATE users SET user_data = %s WHERE id = %s", (json.dumps(user_data), user_id)) - + bind.execute( + "UPDATE users SET user_data = %(user_data)s WHERE id = %(user_id)s", + { + "user_data": json.dumps(user_data), + "user_id": user_id + } + ) + op.drop_constraint(None, 'users', type_='foreignkey') op.drop_column('users', 'library_id') - # ### end Alembic commands ### + # ### end Alembic commands ### \ No newline at end of file