SQL 语句在 Python 中通过 mysqldb.query 失败
SQL statement fails through mysqldb.query in Python
我试图通过我的脚本传递一个查询,但我得到一个 SQL 错误。
运行 Heidisql 中的相同 sql 语句工作正常。
我的问题是:
- 我做错了什么?
错误信息
_mysql.connection.query(self, query)
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server
version for the right syntax to use near 'Gabrielsen)' at line 1")
Python 脚本,其中数据库是到数据库的正确连接
F="Gunnar Gabrielsen"
Database.query('INSERT INTO documents (name) values (' + F + ');')
i=Database.query('SELECT * from documents;')
print(i)
Python version:Python 3.4
模块:我的sqldb
数据库:MariaDB
您还没有为您的价值加上引号。
但是无论如何你都不应该这样做。除了引用问题之外,您还向 sql 注入攻击敞开了大门。
改为使用参数化查询:
cursor.execute('INSERT INTO documents (name) values (%s)', (F,))
您生成了这个:
INSERT INTO documents (name) values (Gunnar Gabrielsen);
你需要的是
INSERT INTO documents (name) values ("Gunnar Gabrielsen");
但是,如果不进行转义或参数化,您将打开您的代码(和系统)以进行 "sql injection" 和其他黑客攻击。
我试图通过我的脚本传递一个查询,但我得到一个 SQL 错误。 运行 Heidisql 中的相同 sql 语句工作正常。
我的问题是: - 我做错了什么?
错误信息
_mysql.connection.query(self, query) _mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Gabrielsen)' at line 1")
Python 脚本,其中数据库是到数据库的正确连接
F="Gunnar Gabrielsen"
Database.query('INSERT INTO documents (name) values (' + F + ');')
i=Database.query('SELECT * from documents;')
print(i)
Python version:Python 3.4
模块:我的sqldb
数据库:MariaDB
您还没有为您的价值加上引号。
但是无论如何你都不应该这样做。除了引用问题之外,您还向 sql 注入攻击敞开了大门。
改为使用参数化查询:
cursor.execute('INSERT INTO documents (name) values (%s)', (F,))
您生成了这个:
INSERT INTO documents (name) values (Gunnar Gabrielsen);
你需要的是
INSERT INTO documents (name) values ("Gunnar Gabrielsen");
但是,如果不进行转义或参数化,您将打开您的代码(和系统)以进行 "sql injection" 和其他黑客攻击。