Python中的SQLite3问题

时间:2011-08-27 23:57:33

标签: python sqlite

我正在尝试在Python中对数据库进行一些基本的迭代。我正在使用已存在的表并将一些int值迭代到其中。非常简单的东西,但我似乎无法让它工作。这是我的非功能代码。

当我运行代码时,它不会返回任何错误,但是当我检查数据库中的表时,没有任何内容写入名为“numbers”的表中的行。

import sqlite3

conn = sqlite3.connect("mydbase.sqlite")
c = conn.cursor()

for x in range(21):
  c.execute("""insert into numbers values (?)""", (x,))

conn.commit()
c.close()

1 个答案:

答案 0 :(得分:0)

如果您实际连接到数据库,则编写的代码将起作用。您确定要连接到数据库吗?对CWD?

这是一个显示正常工作的shell会话

建立数据库:

(~/): sqlite3 mydbase.sqlite
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE "numbers" ("num" integer);
sqlite> .q

连接到该数据库并在Python中更新它:

(~/): python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect("mydbase.sqlite")
>>> c = conn.cursor()
>>> for x in range(21):
...     c.execute("""INSERT INTO numbers VALUES (?)""", (x,))
... 
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
<sqlite3.Cursor object at 0xb76e2c20>
>>> conn.commit()
>>> c.close()
>>>

确认它有效:

(~/): sqlite3 mydbase.sqlite
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM "numbers";
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sqlite>
sqlite> .q

<强> FYI

conn = sqlite3.connect("NOT_THERE.sqlite")不会爆炸。当您执行插入时,您的第一个错误将显示,并且在新创建的NOT_THERE数据库中没有表。