使用 MySQLdb 连接 MySQL 时,如果 id 字段定义是 auto_increment 的,那么 insert 时该如何插入这个字段呢?

2014-08-23 16:21:48 +08:00
 imkh
代码如下:
import mysql.connector
conn = mysql.connector.connect(user='test',password='123456',database='test',use_unicode='Ture')

cursor = conn.cursor()
cursor.execute('drop table if exists test1')
cursor.execute('create table test1(id int not null auto_increment primary key,name varchar(20))')



如果直接在MySQL里操作是可以以insert into test1 select null,'juno'或insert into test1 (name) values ('juno')或insert into test1 (id,name) values (null,'juno')这三种形式插入的,但放在MySQLdb中好像都不行。
各位有什么解决方法呢?
9380 次点击
所在节点    Python
23 条回复
Zuckonit
2014-08-23 16:29:58 +08:00
自增字段需要自己插么?
Automan
2014-08-23 16:31:30 +08:00
insert into test1 (name) values ('juno')

提示什么错误?
imkh
2014-08-23 16:32:30 +08:00
@Automan 提示Wrong number of arguments during string formatting。
Automan
2014-08-23 16:36:06 +08:00
@imkh 不懂python..不过我建议你查下cursor.execute,应该是这里的格式错误。
Chigogo
2014-08-23 16:37:19 +08:00
MySQL的自增值不要插入的。创建的时候就自动有了。
imkh
2014-08-23 16:40:48 +08:00
@Zuckonit 我知道不用,但insert语句要怎么写?
imkh
2014-08-23 16:41:45 +08:00
@Chigogo 是不用啊,但insert语句要怎么写?以insert into test1 (name) values ('juno')这种形式插入会出现“mysql.connector.errors.ProgrammingError: Wrong number of arguments during string formatting”这种错误。
jerry
2014-08-23 16:47:35 +08:00
贴代码吧,应该是用错了
lujjjh
2014-08-23 16:48:53 +08:00
@imkh 这明显不是 SQL 的问题了,错误提示告诉你是字符串格式化的时候参数个数不对。贴完整代码吧。
imkh
2014-08-23 16:51:06 +08:00
谢谢各位,是格式用错了。原来我写的语句是cursor.execute('insert into test1 (name) values (%s)','juno'),改成cursor.execute('insert into test1 (name) values (%s)',['juno'])就行了。
zts1993
2014-08-23 16:51:22 +08:00
null
imkh
2014-08-23 16:54:13 +08:00
@zts1993 我定义了not null。
imkh
2014-08-23 16:56:07 +08:00
@zts1993 在MySQL命令行里是可以的,在代码里会出现“mysql.connector.errors.DatabaseError: 1366 (HY000): Incorrect integer value: 'null' for column 'id' at row 1”错误。
kongkongyzt
2014-08-23 18:04:55 +08:00
建议写成 cursor.execute("insert into test1(name) values('{}')".format('juno'))
Ctech
2014-08-23 18:39:56 +08:00
insert into (name1,name2) values('%s','%s') %(value1,value2).........
Ctech
2014-08-23 18:40:28 +08:00
@Ctech insert into tablename (name1,name2) values('%s','%s') %(value1,value2).........
iptux
2014-08-23 18:51:07 +08:00
没人这样写么?
cursor.execute('insert into test1 (name) values (?)',('juno',))
pc10201
2014-08-23 19:01:05 +08:00
@ctech 的写法有问题,会被sql注入的
@iptux 的写法是对的,
python的mysql最佳实践,来源
http://stackoverflow.com/questions/7929364/python-best-practice-and-securest-to-connect-to-mysql-and-execute-queries
fatpa
2014-08-23 19:28:42 +08:00
sql = "insert into test1 (name) values (%s)"
mysql.execute(sql, 'name')
zeayes
2014-08-24 00:06:16 +08:00
SQL insert语句指定字段名字,SQL语句中变量用占位符。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX