我在Python 3.4.3中使用mysqlclient(MySQLdb1 for python3的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))
不幸的是,当我这样做时,我收到以下错误:
%不支持的操作数类型:'bytes'和'tuple'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中为我解决所有问题?
我无法使用mysqlclient(MySQLdb的一个分支)https://pypi.org/project/mysqlclient/与Python 3.4一起使用正确的SQL语法(为你逃避一切的语法)。我切换到mysql-connector,相同的查询代码现在工作正常。它看起来像是mysqlclient中的一个bug。
pip3 install mysql-connector-python
mysqlclient-python不再支持Python 3.4。使用更新的Python。