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