【问题标题】:MySQLdb execute INSERT to tableMySQLdb 执行 INSERT 到表
【发布时间】:2015-03-07 16:18:11
【问题描述】:

我是 MySql 和 MySQLdb 的新手。但是我已经尝试了几个小时来解决这个问题。

我有一张这样的桌子:

mysql> 描述用户;

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(25) | YES  |     | NULL    |                |
| password | varchar(25) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

代码部分:

def connect_db():
    conn = MySQLdb.connect(user='root',
                            passwd='',
                            db='flask',
                            host='localhost')
    return conn


cur = connect_db().cursor()


cur.execute("DROP TABLE IF EXISTS users")
cur.execute("CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, \
                username VARCHAR(25), password VARCHAR(25))")

str = "INSERT INTO users ('id', 'username', 'password') VALUES (NULL, %s, %s)"

cur.execute(str % ('admin', 'password'))

我收到这样的错误:

> Traceback (most recent call last):   File
> "C:\Users\Emil\Desktop\flaskr\flaskr.py", line 29, in <module>
>     cur.execute(str % ('admin', 'password'))   File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 202, in
> execute
>     self.errorhandler(self, exc, value)   File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in
> defa lterrorhandler
>     raise errorclass, errorvalue
> _mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL synta ; check the manual that corresponds to your MySQL server
> version for the right yntax to use near ''id', 'username', 'password')
> VALUES (NULL, admin, password)  at line 1")

我猜我的 INSERT 命令有问题。我不知道该怎么做,并尝试搜索可能对 google 有帮助的内容。

【问题讨论】:

    标签: python mysql mysql-python


    【解决方案1】:

    这是您使用当前解决方案获得的结果查询:

    INSERT INTO users ('id', 'username', 'password') VALUES (NULL, admin, password)
    

    如您所见,adminpassword 周围没有引号 - 这就是 ProgrammingError 异常的原因。

    除此之外,通过字符串格式插入查询参数会使您的代码容易受到 SQL 注入的影响


    相反,参数化查询

    query = """
        INSERT INTO 
            users 
            ('id', 'username', 'password') 
        VALUES 
            (NULL, %s, %s)
    """
    
    cur.execute(query, ('admin', 'password'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 2012-06-08
      • 2013-02-21
      • 2010-09-16
      • 2019-07-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多