2010-07-31 4 views
0

파이썬에서 데이터베이스 sqlite의 데이터를 표시 할 수 없습니다. 쿼리 변수의파이썬 및 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

0

표시된 create table 문자열은 구문 상 유효하지 않은 Python이므로 insert into 문자열입니다.

+0

무슨 뜻인가요? 뭐가 잘못 됐어? – Ockonal

+0

필자는 그가 따옴표를 언급하고 있다고 생각합니다. Python 구문 오류가 없으므로 코드에 실제로 불일치가없는 것으로 추측하고 있지만 INSERT 문은 ok를 출력하므로 추측하겠습니다. –

+0

@ larry-lustig @msw 오, 죄송합니다. 그건 내 잘못입니다. 전달되는 상수 문자열이 있습니다. 따옴표를 간단한 문자열로 바꾼 후에이를 빼는 것을 잊었습니다. – Ockonal

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