2010-11-16 3 views
1

в Python 2.6.5 с sqlite3.version 2.4.1, я использую следующий код:Почему Sqlite говорит мне, что такой столбец не существует, когда я просто его создал?

c = conn.cursor() 

# Create table 
c.execute('''create table stocks 
(date text, trans text, symbol text, 
qty real, price real)''') 

# Insert a row of data 
c.execute("""insert into stocks 
      values ('2006-01-05','BUY','RHAT',100,35.14)""") 

# Save (commit) the changes 
conn.commit() 

c.execute('''insert into stocks values(date=?, trans=?, symbol=?, qty=?, price=? 
)''', ('08-26-1984', 'SELL', 'GOGL', 3, 400.00)) 

# We can also close the cursor 

if we are done with it 
c.close() 

И выдает ошибку:

Traceback (most recent call last): 
    File "dbtest.py", line 18, in <module> 
    c.execute('''insert into stocks values(date=?, trans=?, symbol=?, qty=?, price=?)''', ('08-26-1984', 'SELL', 'GOGL', 3, 400.00)) 
sqlite3.OperationalError: no such column: date 

Мой вопрос - что чёрта ??? Я создал столбец с именем «дата»! Я провел последние два часа, пытаясь понять, что в мире не так, и я очень расстраиваюсь. Кроме того, когда я пытаюсь открыть его в командной строке, я сказал:

Unable to open database "orders": file is encrypted or is not a database

Любая помощь будет высоко оценена как я собираюсь поставить свой компьютер через стену.

Спасибо!

+2

Как общее правило, это плохая идея, чтобы дать столбец имя, соответствующее ключевое слово в каждой базе данных или на языке, который вы используете для записи в него. На самом деле, я не думаю, что это ваша проблема, но в будущем название столбца «дата», вероятно, вас укусит. –

+0

Это полезный совет. Я просто вытащил код создания примера из [здесь] (http://docs.python.org/library/sqlite3.html). –

ответ

7

Неверный syntax для этой инструкции вставки. Это будет работать:

>>> c.execute('''insert into stocks 
       (date, trans, symbol, qty, price)values(?,?,?,?,?)''', 
       ('08-26-1984', 'SELL', 'GOGL', 3, 400.00)) 
+0

Перейти на цифру. <Я провел летние месяцы, записывая SQL-запросы для Microsoft SQL Server, поэтому (как обычно) я просто подумал: «Я знаю, как это сделать». Сообщение об ошибке не является наиболее полезным (и оно является ошибочным, IMO). Спасибо за исправление - просто хочу, чтобы я узнал несколько часов назад! –

Смежные вопросы