2010-07-31 48 views
0

我无法在python中显示数据库sqlite中的数据。查询变量的Python和sqlite的问题

connection = sqlite3.connect('db') 
connection.cursor().execute('CREATE TABLE IF NOT EXISTS users ( \ 
         id TEXT,         \ 
         name TEXT,         \ 
         avatar TEXT         \ 
       )') 

# In cycle: 
query = 'INSERT INTO users VALUES ("' + str(friend.id) + '", "' + friend.name + '", "' + friend.avatar +'")' 
print query 
connection.cursor().execute(query) 
connection.commit() 

# After cycle 
print connection.cursor().fetchall() 

示例输出:

INSERT INTO users VALUES ("111", "Some Name", "http://avatar/path") 

在结果,使用fetchall回报空的元组。为什么?


UPD 遗忘代码:

connection.cursor().execute('SELECT * FROM users') 
connection.cursor().fetchall() 

→ []

回答

0
import sqlite3 

con = sqlite3.connect("db") 

con.execute("create table users(id, name, avatar)") 

con.execute("insert into users(id, name, avatar) values (?, ?, ?)", (friend.id, friend.name, friend.avatar)) 
con.commit() 

for row in con.execute("select * from users") 
    print row 

con.close() 
3

INSERT不返回数据。要恢复数据,你必须发出一条SELECT语句。

+0

对不起,我忘了这码。我做了SELECT语句。 – Ockonal 2010-07-31 16:55:09

0

因为显示的create table字符串在语法上无效Python,因此字符串为insert into

+0

你是什么意思?那里有什么不对? – Ockonal 2010-07-31 16:55:53

+0

我认为他指的是引号,尽管我猜测你的代码中不匹配并不存在,因为你没有得到Python语法错误,并且INSERT语句输出正常。 – 2010-07-31 17:01:02

+0

@ larry-lustig @msw对不起,那是我的错。有传递不断的字符串,我忘记用简单的字符串替换后用引号取出。 – Ockonal 2010-07-31 17:06:11

0

其实,第一个问题的答案是:因为你使用不同的游标。

connection.cursor()在您之前创建的连接中创建一个新的游标。 fetchall()为您提供在同一游标中执行的查询的结果。即你所做的是:

# After cycle 
cursor1 = connection.cursor() 
cursor1.execute('SELECT * FROM users') 
cursor2 = connection.cursor() 
cursor2.execute("") 
cursor2.fetchall() 

你应该做什么是这样的:

# After cycle 
cursor = connection.cursor() 
cursor.execute('SELECT * FROM users') 
print cursor.fetchall()