Добавить столбец к SQLALCHEMY TABLE

Я сделал стол, используя SQLALCHEMY и забыл добавить колонку. Я в основном хочу сделать это:

users.addColumn('user_id', ForeignKey('users.user_id'))

Что такое синтаксис для этого? Я не мог найти его в документах.

31
задан Phillip 10 January 2018 в 22:53
поделиться

2 ответа

Та же проблема здесь. Что я сделаю, так это перебираю базу данных и добавляю каждую запись в новую базу данных с дополнительным столбцом, затем удаляю старую базу данных и переименовываю новую в эту.

-1
ответ дан 27 November 2019 в 21:57
поделиться

Просто продолжая простой путь, предложенный chasmani, небольшое улучшение

'''
# simple migration
# columns to add: 
# last_status_change = Column(BigInteger, default=None) 
# last_complete_phase = Column(String, default=None)  
# complete_percentage = Column(DECIMAL, default=0.0)
'''

import sqlite3

from config import APP_STATUS_DB
from sqlalchemy import types


def add_column(database_name: str, table_name: str, column_name: str, data_type: types, default=None):
    ret = False

    if default is not None:
        try:
            float(default)
            ddl = ("ALTER TABLE '{table_name}' ADD column '{column_name}' '{data_type}' DEFAULT {default}")
        except:
            ddl = ("ALTER TABLE '{table_name}' ADD column '{column_name}' '{data_type}' DEFAULT '{default}'")
    else:
        ddl = ("ALTER TABLE '{table_name}' ADD column '{column_name}' '{data_type}'")

    sql_command = ddl.format(table_name=table_name, column_name=column_name, data_type=data_type.__name__,
                             default=default)
    try:
        connection = sqlite3.connect(database_name)
        cursor = connection.cursor()
        cursor.execute(sql_command)
        connection.commit()
        connection.close()
        ret = True
    except Exception as e:
        print(e)
        ret = False
    return ret


add_column(APP_STATUS_DB, 'procedures', 'last_status_change', types.BigInteger)
add_column(APP_STATUS_DB, 'procedures', 'last_complete_phase', types.String)
add_column(APP_STATUS_DB, 'procedures', 'complete_percentage', types.DECIMAL, 0.0)
0
ответ дан 27 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: