我在Python 3.4.3中使用mysqlclient(用于python3的MySQLdb1的fork),根据我在网上阅读的内容(Escape string Python for MySQL),MySQLdb Python查询应像这样编写,以进行适当的转义:
query = self.conn.cursor()
query.execute('SELECT 1 FROM servers WHERE ip=%s AND port=%s AND game_id=%s' ,(ip,port,gameid))
不幸的是,当我这样做时,出现以下错误:
%不支持的操作数类型:“字节”和“元组” mysqldb
这似乎可行,但这可能导致SQL注入吗?
query = self.conn.cursor()
query.execute("SELECT 1 FROM servers WHERE ip='%s' AND port=%s AND game_id='%s'" % (ip,port,gameid))
那么,如何安全地使用首选的语法方法使上面的查询正常工作,而该语法方法将在Python 3.4.3中对我全部进行转义?
答案 0 :(得分:0)
我无法使mysqlclient(MySQLdb的一个分支)https://pypi.org/project/mysqlclient/与具有正确SQL语法(为您转义一切的语法)的Python 3.4一起使用。我切换到mysql-connector,现在相同的查询代码可以正常工作。它看起来像mysqlclient中的错误。
pip3 install mysql-connector-python
答案 1 :(得分:0)
mysqlclient-python不再支持Python 3.4。 使用更新的Python。