2010-11-16 6 views
1

en Python 2.6.5 avec sqlite3.version 2.4.1, j'utiliser le code suivant:Pourquoi Sqlite ne me dit-il pas qu'une telle colonne existe quand je l'ai clairement créée?

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() 

Et il renvoie une erreur:

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 

Ma question - ce que le diable ??? J'ai créé une colonne avec le nom "date"! J'ai passé les deux dernières heures à essayer de comprendre ce qui ne va pas dans le monde et je suis vraiment frustré. Aussi, lorsque je tente de l'ouvrir par la ligne de commande, on me dit:

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

Toute aide serait grandement apprécié que je suis sur le point de mettre mon ordinateur à travers un mur.

Merci!

+2

En règle générale, il est une mauvaise idée de donner une colonne un nom qui correspond à un mot-clé dans la base de données soit votre ou dans la langue que vous utilisez pour écrire. Je ne pense pas que ce soit votre problème ici, mais à l'avenir nommer une colonne «date» vous mordra probablement quelque part. –

+0

C'est un conseil utile - je viens de tirer l'exemple de code de création de [ici] (http://docs.python.org/library/sqlite3.html). –

Répondre

7

Incorrect syntax pour cette instruction d'insertion. Cela fonctionne:

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

Go figure>.

Questions connexes