2010-07-31 42 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()