【问题标题】:SQL statement fails through mysqldb.query in PythonSQL 语句通过 Python 中的 mysqldb.query 失败
【发布时间】:2017-10-27 20:08:28
【问题描述】:

我试图通过我的脚本传递一个查询,但我得到一个 SQL 错误。 在 Heidisql 中运行相同的 sql 语句可以正常工作。

我的问题是: - 我做错了什么?

错误信息

_mysql.connection.query(自我,查询) _mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MariaDB 服务器对应的手册 在第 1 行的 'Gabrielsen)' 附近使用正确语法的版本")

Database 是与数据库的正确连接的 Python 脚本

F="Gunnar Gabrielsen"
Database.query('INSERT INTO documents (name) values (' + F + ');')
i=Database.query('SELECT * from documents;')
print(i)

Python 版本:Python 3.4

模块:Mysqldb

数据库:MariaDB

【问题讨论】:

    标签: python mariadb mysql-python


    【解决方案1】:

    你已经生成了这个:

    INSERT INTO documents (name) values (Gunnar Gabrielsen);
    

    你需要的是

    INSERT INTO documents (name) values ("Gunnar Gabrielsen");
    

    但是,如果不进行转义或参数化,您就会将代码(和系统)开放给“sql 注入”和其他黑客攻击。

    【讨论】:

      【解决方案2】:

      你没有在你的价值周围加上引号。

      但无论如何你都不应该这样做。除了引用问题之外,您还面临着 sql 注入攻击。

      改用参数化查询:

      cursor.execute('INSERT INTO documents (name) values (%s)',  (F,))
      

      【讨论】:

      • 谢谢你,也给我见解sqlinjection 我看到了%s,但我一直不明白它的应用
      猜你喜欢
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      相关资源
      最近更新 更多