python sqlite 插入的数据含有变量,结果不一致

复制代码
 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

 

posted @   万一免五开户指南  阅读(3393)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示