2015-03-03 2 views
-1
import sqlite3 
import codecs 

sqlite3.connect("test.db") 
db.execute("""CREATE TABLE IF NOT EXISTS STATIONS 
     (StationUID INT PRIMARY KEY  NOT NULL, 
     StationNumber   TEXT NOT NULL, 
     StationName    TEXT NOT NULL, 
     StationLongitude  REAL NOT NULL, 
     StationAltitude   REAL NOT NULL);""") 

print "Created Table STATIONS successfully" 
cr = db.cursor() 
name = "b" 
station_number = "0123" 
longitude = 13.4 
altitude = 34.4 
cr.execute("INSERT INTO STATIONS VALUES", (None, station_number, name, longitude, altitude)) 
db.commit() 

Он бросает sqlite3.OperationalError: near "VALUES": syntax error, но я не понимаю, почему, потому что это тот же синтаксис, я нашел в примере.SQLite3 Python 2.7 sqlite3.OperationalError ошибка синтаксиса

+0

'cr.execute ("INSERT INTO СТАНЦИИ ЗНАЧЕНИЯ (None, station_number, имя, долгота, высота)")' – ZdaR

+1

это не правильно это переменные а не имена столбцов. – quesaionasis

+0

@Anmol_uppal: нет, потому что тогда вы смешиваете литералы Python и имена переменных в синтаксисе SQL. Это не сработает. –

ответ

2

Вы должны указать какие значения для вставки:

INSERT INTO STATIONS VALUES (value1, value2, ...) 

Вы не можете пропустить эту часть. Использование SQL параметров для отображения значений Python в этих местах в синтаксисе SQL:

cr.execute(
    "INSERT INTO STATIONS VALUES (?, ?, ?, ?, ?)", 
    (None, station_number, name, longitude, altitude)) 
+0

http://www.tutorialspoint.com/sqlite/sqlite_insert_query.htm говорится, что вам может не понадобиться указывать имя столбца в запросе SQLite, если вы добавляете значения для всех столбцов таблицы. – quesaionasis

+0

@quesaionasis: да, если вы вставляете значения для меньшего количества столбцов, чем определяет таблица. Ваша таблица имеет 5 столбцов, вы вставляете 5 значений, поэтому здесь нет необходимости указывать имена столбцов. Вы можете удалить исходный столбец «Нет» (переведенный в NULL в SQLite), если вы укажете другие 4 имени столбца. –

+0

'cr.execute ("INSERT INTO STATION VALUES (StationNumber, StationName, StationLongitude, StationAltitude)", (station_number, name, longitude, heightitude)) 'это приводит к sqlite3.OperationalError: нет такого столбца: StationNumber – quesaionasis

1

Команда INSERT не завершена. Вам нужно вставить значения в INSERT написав:

cr.execute("INSERT INTO STATIONS VALUES (?, ?, ?, ?, ?)", (None, station_number, name, longitude, altitude)) 
Смежные вопросы