如何解决psycopg2 vs MySQLdb反斜杠转义行为
import MysqLdb
import psycopg2
# CREATE DATABASE mytest CHaraCTER SET utf8;
db=MysqLdb.connect(host="localhost",user="anton",passwd="password",db="mytest")
cur = db.cursor()
cur.execute("drop table if exists mytable")
cur.execute("create table mytable (textcol text)")
cur.execute("insert into mytable values (' some \\\\ escaped stuff')")
cur.execute("select * from mytable")
print(cur.fetchall())
# CREATE DATABASE mytest ENCODING 'UTF8';
db=psycopg2.connect(host="localhost",password="password",dbname="mytest")
cur = db.cursor()
cur.execute("drop table if exists mytable")
cur.execute("create table mytable (textcol text)")
cur.execute("insert into mytable values (' some \\\\ escaped stuff')")
cur.execute("select * from mytable")
print(cur.fetchall())
哪个输出:
((' some \\ escaped stuff',),)
[(' some \\\\ escaped stuff',)]
基本上,我想要做的就是能够使用相同的插入sql(我无法修改),并且能够通过添加两个db驱动程序使用两个驱动程序来为text
列返回相同的内容连接的参数。我也找不到如何控制这种行为,所以被卡住了。
解决方法
实际上两者都是可能的。
db=MySQLdb.connect(host="localhost",user="anton",passwd="password",db="mytest",sql_mode="NO_BACKSLASH_ESCAPES")
将告诉mysql
to treat backslashes like the standard,依此类推like postgresql
has been by default since 9.1。像这样设置sql_mode
可能不是您想要的,所以类似sql_mode="TRADITIONAL,NO_BACKSLASH_ESCAPES"
的东西(注意它们之间没有空格,会出现空格错误)会给您严格的{{1 }}具有转义的SQL标准行为。
也可以采用其他方法-在默认配置中(在Ubuntu 20.04上),您可以使sql_mode
的行为类似于postgresql
:
mysql
实际上puts postgresql
back in pre-9.1 mode与反斜杠转义有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。