2016-06-29 4 views
0

У меня есть ADT, который я могу изменить с помощью Advantage Data Architect.adsdb INSERT INTO

Однако я хочу иметь возможность изменить таблицу с помощью adsdb. Я создал таблицу, используя;

cnxn = adsdb.connect(DataSource='c:/Python27/', ServerType='1') 
cursor = cnxn.cursor() 
cursor.execute('CREATE TABLE Persons (PersonID INTEGER, LastName CHAR(100), FirstName CHAR(100))' 

Я могу вставить данные в поле PersonID, используя;

cursor.execute('INSERT INTO Persons (PersonID) VALUES (01)') 

Однако попытка вставить данные в столбцы типа char с использованием;

cursor.execute('INSERT INTO Persons (LastName) VALUES ("Smith")') 

Я получаю сообщение об ошибке;

adsdb.OperationalError: Error 7200: AQE Error: State = S0000; NativeError = 2121; [iAnywhere Solutions][Advantage SQL Engine]Column not found: Smith -- Location of error in the SQL statement is: 40 

Я попытался использовать одиночные кавычки и без кавычек в поле VALUE, но я по-прежнему представлен с ошибкой. У меня есть Google'ы коды ошибок, но я нашел мало для решения.

ответ

0

В ADS SQL (да и вообще в ANSI-SQL) строки (CHAR наберется) значения have to be enclosed in single quotes:

INSERT INTO Persons (LastName) VALUES ('Smith') 

In Python a string literal могут быть написаны либо в одинарные или двойные кавычки:

print("Hello") 
print('Hello') 

Поскольку правильный оператор SQL не содержит двойных кавычек, было бы проще использовать строковый литерал с двойными кавычками:

cursor.execute("INSERT INTO Persons (LastName) VALUES ('Smith')") 

Если вы хотите использовать одну строку в кавычках буквальным, вы должны бежать одиночные кавычки внутри буквальному:

cursor.execute('INSERT INTO Persons (LastName) VALUES (\'Smith\')') 

Но я бы не сделать это так, так как с помощью строки интерполяции или конкатенацию, чтобы получить значения в оператор SQL is very dangerous и может привести к SQL-инъекции.

Правильный путь будет использовать параметр:

cursor.execute('INSERT INTO Persons (LastName) VALUES (?)', 'Smith') 

КСТАТИ: «Лицо» это страшное имя таблицы (множественное число человека является человек, вы должны либо использовать «лицо» Одер «народа», как имя таблицы).

+0

Блестящий ответ спасибо Йенс. Спасибо за подсказку, таблица «Лица» просто для тестирования :) – apmacniven