1 def insert(): 2 conn = sqlite3.connect("sqlite.db") 3 print "open database passed" 4 table_create = ''' 5 CREATE TABLE COMPANY 6 (ID INT PRIMARY KEY, 7 NAME TEXT, 8 AGE INT, 9 ADDRESS CHAR(50), 10 SALARY REAL 11 ); 12 ''' 13 conn.execute(table_create)
上面定义了一个表。
1 temp="2017-12-12" 2 paul="INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,%s,32,'CALIFORNIA',2000.00);" %temp #这里用python的变量替换 3 conn.execute(paul) 4 conn.commit() 5 conn.close()
生成了一个数据库后,查看里面的数据,发现 ID=1 下的name值是1993。 开始的时候觉得很奇怪。 记过不断替换,后面调试才发现了问题。
尝试直接打印paul语句:
print paul
输出的是:
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,2017-12-12,32,'CALIFORNIA',2000.00);
看到了吗?
2017-12-12
这样看来就知道问题了,原来语句中如果是字符的话,应该要加入“”。 问题出在这里。
所以 在变量替换语句中 添加一个 “”就 把问题解决了。
paul="INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,\"%s\",32,'CALIFORNIA',2000.00);" %myname
另外一种方法更加简单: 就是在execute语句中把变量全部用(?) 表示,这样就不用每一个变量都使用“” 来添加。
原问题地址:http://www.30daydo.com/question/18