Подтвердить что ты не робот

Добавить столбец в таблицу SQLAlchemy

Я сделал таблицу с использованием SQLAlchemy и забыл добавить столбец. Я в основном хочу это сделать:

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

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

4b9b3361

Ответ 1

Это называется миграцией базы данных (SQLAlchemy не поддерживает перенос из коробки). Вы можете посмотреть sqlalchemy-migrate, чтобы помочь в таких ситуациях, или просто ALTER TABLE через вашу выбранную утилиту командной строки базы данных,

Ответ 2

У меня та же проблема, и мысль об использовании библиотеки миграции только для этой тривиальной вещи заставляет меня дрожать. Во всяком случае, это моя попытка:

def add_column(engine, table_name, column):
    column_name = column.compile(dialect=engine.dialect)
    column_type = column.type.compile(engine.dialect)
    engine.execute('ALTER TABLE %s ADD COLUMN %s %s' % (table_name, column_name, column_type))

column = Column('new column', String(100), primary_key=True)
add_column(engine, table_name, column)

Тем не менее, я не знаю, как вставить primary_key=True в необработанный SQL-запрос.

Ответ 4

У меня есть база данных под названием "ncaaf.db", построенная с использованием sqlite3 и таблицей "игры". Поэтому я бы записал CD в тот же каталог в командной строке linux и сделал

sqlite3 ncaaf.db
alter table games add column q4 type float

и это все, что нужно! Просто убедитесь, что вы обновили свои определения в своем коде sqlalchemy.

Ответ 5

У меня была такая же проблема, я закончил тем, что просто написал свою собственную функцию в raw sql. Если вы используете SQLITE3, это может быть полезно.

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

import sqlite3 

def add_column(database_name, table_name, column_name, data_type):

  connection = sqlite3.connect(database_name)
  cursor = connection.cursor()

  if data_type == "Integer":
    data_type_formatted = "INTEGER"
  elif data_type == "String":
    data_type_formatted = "VARCHAR(100)"

  base_command = ("ALTER TABLE '{table_name}' ADD column '{column_name}' '{data_type}'")
  sql_command = base_command.format(table_name=table_name, column_name=column_name, data_type=data_type_formatted)

  cursor.execute(sql_command)
  connection.commit()
  connection.close()

Ответ 6

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