2015-02-10 73 views
-1

下面的代码显示错误如何在sql lite数据库中插入字符串值?

import sqlite3 as lite 
import sys 

con = lite.connect('test.db') 
url=http://www.google.com  
with con:  
    cur = con.cursor()  
    cur.execute("CREATE TABLE info(Id INT, Url_Name varchar(55))") 
    cur.execute("INSERT INTO info VALUES(1,url)") 

我试图与%s,但它仍然没有工作,,,,,,

回答

2

url=http://www.google.com是无效的语法,但想必你已经意识到,并且已经将其改为一个字符串,即

URL =“http://www.google.com

即使在这之后,你正在试图插入一个非字符串值urlUrl_Name栏。查询:

"INSERT INTO info VALUES(1,url)" 

您可以通过使用参数化查询,使这项工作:

cur.execute("INSERT INTO info VALUES(1, ?)", (url,)) 

而且,你的程序第一次运行之后,info表将存在,而随后的程序的运行将失败(除非你在其他地方删除表)。另外,您可以在IF NOT EXISTS条款添加到CREATE TABLE查询:

cur.execute("CREATE TABLE IF NOT EXISTS info(Id INT, Url_Name varchar(55))") 
+0

每当我使用这个参数化查询,我得到的输出(1,u'http://www.google.com'),,我不知道你从哪里来 – Jibs 2015-02-10 15:10:49

+0

'u'表示字符串是'unicode'字符串。 sqllite将TEXT字段返回为unicode,所以这就是为什么你会看到'u'。 – mhawke 2015-02-11 00:13:37

0

感谢mhawke的答案,但 每当我使用参数化查询:

cur.execute(“INSERT INTO信息VALUES(1,? )”(URL)) 我得到的输出(1,U 'http://www.google.com') 我不知道从U哪里传来

我用

cur = con.cursor()  
cur.execute("SELECT * FROM info") 
rows = cur.fetchall() 
for row in rows: 
    print row* 
相关问题