无法使用 MySQL 在 python 中插入单列值

Posted

技术标签:

【中文标题】无法使用 MySQL 在 python 中插入单列值【英文标题】:Can't insert single column value in python using MySQL 【发布时间】:2017-05-09 14:39:57 【问题描述】:

我有一个单列表。我需要在此列中插入值。该程序运行正确,没有错误。但是当我检查数据库时,没有插入任何内容。当我在代码和表格中添加另一列时,程序会正确插入数据。你能告诉我如何为单列表插入数据吗? 这是不向表中插入任何内容的单列代码。

import mysqldb
conn = MySQLdb.connect(host= "localhost",
                  user="root",
                  passwd="123",
                  db="dbname")
cursor = conn.cursor()
x=100
try:
    sql="""INSERT INTO table (col1) VALUES ('%s')"""
    cursor.execute(sql, (x))
    conn.commit()
except:
    conn.rollback()

conn.close()

这是两列代码。

import MySQLdb
conn = MySQLdb.connect(host= "localhost",
                  user="root",
                  passwd="123",
                  db="dbname")
cursor = conn.cursor()
x=100
y=2
try:
    sql="""INSERT INTO table (col1,col2) VALUES ('%s','%s')"""
    cursor.execute(sql, (x,y))
    conn.commit()
except:
    conn.rollback()

conn.close()

【问题讨论】:

【参考方案1】:

试试这个:

sql="""INSERT INTO table (col1) VALUES ();""".format(x)
cursor.execute(sql)

【讨论】:

请不要忘记解释/评论您的代码,并提供相关文档[来自评论] 请避免纯代码回答。尝试解释您的代码如何解决 OP 的问题。发现这个问题的其他人可能没有你那么有经验;帮助他们了解您的解决方案。 此策略也是等待发生的 sql 注入(尽管在这种特殊情况下,您可能首先会遇到 sql 语法错误)。【参考方案2】:

您可以尝试以下任何一种:

    不要用'%s',你可以用?代替 不要使用'%s',而是使用不带引号的%s

【讨论】:

【参考方案3】:

你需要去掉%s周围的引号,之后你需要知道cursor.execute()的第二个参数是一个元组,并且写成一个单元组:

(item,)

注意逗号。那么解决方法是:

sql="""INSERT INTO table (col1) VALUES (%s)"""
cursor.execute(sql, (x,))

【讨论】:

我试过这个sql="""INSERT INTO table (col1,col2) VALUES (%s)""" cursor.execute(sql, (x,))。它会运行,但不会将数据插入数据库。 如果您删除占位符周围的引号,您的两列版本是正确的。

以上是关于无法使用 MySQL 在 python 中插入单列值的主要内容,如果未能解决你的问题,请参考以下文章

Python MySql 选择单列返回奇怪的值

使用python将数据插入mySQL

带有Python的Mysql无法插入具有自动增量ID的记录,为啥?

MySQL处理重复键错误插入具有多个唯一索引的表;不是多列唯一索引

MySQL学习笔记

MySQL_select distinct无法实现只对单列去重,并显示多列结果的解决方法