微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

psycopg2 vs MySQLdb反斜杠转义行为

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?