2013-02-26 71 views
1

我正在学习一些使用python编程,并使用SQlite3 我一直遇到同样的问题,我无法弄清楚出了什么问题。SQLite3与选择数据(在Python中)

我的表设置

def user_table(): 
    data = lite.connect(database) 
    dat = data.cursor() 

    with data: 
     dat.executescript("""CREATE TABLE IF NOT EXISTS Users(Id INTEGER PRIMARY KEY AUTOINCREMENT, 
     'Username' UNIQUE, 
     'Password', 
     'Email', 
     'UserCharacters_Id' INTEGER 
     )"""); 

现在我的代码,以选择一个用户名(用户名123存在并表似乎正确的(使用SQLite的工作室选中)

database = 'test.db' 
data = lite.connect(database) 
dat = data.cursor() 
with data: 
    dat.execute("SELECT * FROM Users WHERE 'Username'='123'") 
    user = dat.fetchone() 
    print user 

我尝试了很多不同的方法,但它一直返回None。 python部分似乎在工作,只是SQL的选择部分出错lp me out

回答

2

在SQL中,单引号用于字符串,而表/列名用双引号引起来。 (SQLite支持后者在有些地方与MySQL兼容单引号)。

你的查询字符串Username比较对字符串123,并为每个记录比较失败。

使用此:

dat.execute('SELECT * FROM Users WHERE "Username" = \'123\'') 

但要防止字符串格式化的问题和SQL注入攻击,你应该使用参数:

username = "123" 
dat.execute('SELECT * FROM Users WHERE "Username" = ?', (username,)) 
+0

*弓*非常感谢,(我在做最后一部分在其他部分,但为了简化我与123测试)。这帮助了我很多(现在工作)。谢谢:) – 2013-02-26 12:44:22

+0

在这种情况下,接受答案:-)按下下方投票箭头下的符号。 – 2013-02-26 16:32:38