【问题标题】:Can't insert single column value in python using MySQL无法使用 MySQL 在 python 中插入单列值
【发布时间】: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()

【问题讨论】:

    标签: python mysql sql python-2.7


    【解决方案1】:

    试试这个:

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

    【讨论】:

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

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

    1. 不要用'%s',你可以用?代替
    2. 不要使用'%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,))。它会运行,但不会将数据插入数据库。
      • 如果您删除占位符周围的引号,您的两列版本是正确的。
      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 2019-03-20
      • 1970-01-01
      • 2015-01-22
      • 2015-05-10
      • 2013-07-03
      • 2014-06-06
      • 1970-01-01
      相关资源
      最近更新 更多