Я новичок в python (как я уверен, вы можете сказать из моего кода) и в основном написал пример сценария для тестирования некоторых основных команд, чтобы я мог лучше понять, как все работает. У меня все работает так, как задумано, за исключением последней команды «вставить» - после нескольких часов поиска в Google и экспериментов я не могу понять, в чем дело, поэтому я был бы признателен, если кто-нибудь сможет показать мне, что нужно изменить, и помочь понять, почему ( Я уверен, что это просто, но я в тупике!).
Ниже приведена строка, которая доставляет мне неприятности:
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
Вот весь сценарий для контекста, если это поможет:
import sqlite3
sqlite_file = '/test_database.sqlite' # name of the sqlite database file
table_name = 'test_table'
column1 = 'my_1st_column'
column2 = 'my_2nd_column'
column3 = 'my_3rd_column'
column4 = 'my_4th_column'
ID = int(123456)
Base = 'Arnold'
Snu = 'test'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
c.execute("UPDATE {tn} SET {cn2}=('Snu'), {cn3}=('Muh'), {cn4}=('Arnold_A') WHERE {cn1}=({NID})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, NID=ID))
i = 1
while(i<15):
if i == 1: IN = 'B'
if i == 2: IN = 'C'
if i == 3: IN = 'D'
if i == 4: IN = 'E'
if i == 5: IN = 'F'
if i == 6: IN = 'G'
if i == 7: IN = 'H'
if i == 8: IN = 'I'
if i == 9: IN = 'J'
ID = ID+1
i = i+1
Name = Base + '_' + IN
params = (Snu, IN, Name)
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
if(i == 10): break
conn.commit()
conn.close()
Он будет хорошо писать элемент "VID", если он изолирован (который представляет собой целочисленный столбец и первичный ключ таблицы), но все, что после этого интерпретируется как столбец, и я получаю "нет такого столбца: [значение ] "ошибка.
Я получаю эту ошибку независимо от того, что следует после «VID» - будь то любая переменная, как показано в приведенной выше команде, или если я пытаюсь вставить прямое строковое значение. Эти другие столбцы - просто текстовые столбцы, если это помогает.