SQLite3 ist einfach zu erstellen, leichtgewichtig und benutzerfreundlich, aber einige SQL-Anweisungen unterstützen es nicht und es gibt einige Schwierigkeiten. Beispielsweise unterstützen die Funktionen ALTER TABLE nur RENAME COLUMN und ADD COLUMN.
Es hat lange gedauert, bis diese Spezifikation erreicht war, und es ist ziemlich mühsam, damit umzugehen, daher werde ich sie als Erinnerung belassen. (Ich wollte die Tabellendefinition ändern, also wie es geht)
Das allgemeine Verfahren ist wie folgt
Es ist einfach zu machen, aber die zweite Operation ist ziemlich umständlich zu mechanisieren. Der untere Teil ist das, was ich mit Python zu unterstützen versucht habe. (Dennoch müssen Sie jedes Mal, wenn Sie die Schemadefinition ändern, diese festlegen ...)
SQLite3-Operation
import sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
create_table_sql = cur.execute("select sql from sqlite_master where name = 'target_table'").fetchone()[0]
create_temp_table_sql = ( #Beispiel für die Änderung der temporären SQL-Tabellenerstellung
create_table_sql
.lower()
.replace('target_table', 'temp_table')
.replace(')', ', foreign key (test_fk) references test_table(id) )') #Fügen Sie eine zusätzliche Anweisung für den externen Schlüssel ein
)
cur.execute(create_temp_table_sql)
cur.execute('insert into temp_table select * from target_table')
cur.execute('drop table target_table')
cur.execute('alter table temp_table rename to target_table')
cur.close()
con.close()
Dies macht es schwierig, eine Tabelle mit komplizierten Verknüpfungsbeziehungen zu aktualisieren. Gibt es also eine andere Möglichkeit, dies zu tun? .. ..
Recommended Posts