Переименование столбца таблицы sqlite3 - PullRequest
0 голосов
/ 06 мая 2020

Я изо всех сил пытаюсь переименовать свой столбец sqlite3 в python.

if n[:1] == 'B': 
     c.execute('''ALTER TABLE '''+n+''' RENAME COLUMN DRcode TO CRcodetemp''')

Где n = ‘B1’ и type(n) - это <class 'str'> и c = conn.cursor()

Ошибка:

c.execute('''ALTER TABLE '''+n+''' RENAME COLUMN DRcode TO CRcodetemp''')                                                              
sqlite3.OperationalError: near "COLUMN": syntax error     

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Здесь отлично работает:

In [1]: import sqlite3

In [2]: db = sqlite3.connect(':memory:')
Out[2]: <sqlite3.Connection at 0x803bfbab0>

In [3]: db.execute('CREATE TABLE B1(foo TEXT, DRcode INT)')
Out[3]: <sqlite3.Cursor at 0x803b30960>

In [4]: db.execute('ALTER TABLE B1 RENAME COLUMN DRcode TO CRcodetemp')
Out[4]: <sqlite3.Cursor at 0x803b30c00>

Информация о версии:

In [5]: import sys

In [6]: sys.version
Out[6]: '3.7.7 (default, Mar 19 2020, 19:56:47)'

In [7]: sqlite3.version
Out[7]: '2.6.0'

Обратите внимание, что версия модуля sqlite3 не такая же, как версия sqlite . В моем случае это: SQLite version 3.31.1.

0 голосов
/ 06 мая 2020

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

if n[:1] == 'B':  # For Bank Accounts
            # rename table, create new table, and put value in correct place
            c.execute('''ALTER TABLE '''+n+''' RENAME TO temp''')
            c.execute('''CREATE TABLE '''+n+''' (id, CRcodetemp)''')
            c.execute('''INSERT INTO '''+n+'''(id, CRcodetemp)
                         SELECT id, DRcode
                         FROM temp''')
            c.execute('''DROP TABLE temp''')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...