Kai*_*Kai 15 python postgresql psycopg
这个字符串:
"CREATE USER %s PASSWORD %s", (user, pw)
Run Code Online (Sandbox Code Playgroud)
总是扩大到:
CREATE USER E'someuser' PASSWORD E'somepassword'
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么?
编辑:上面的扩展字符串是我的数据库在错误消息中返回的字符串.我正在使用psycopg2来访问我的postgres数据库.真正的代码如下所示:
conn=psycopg2.connect(user=adminuser, password=adminpass, host=host)
cur = conn.cursor()
#user and pw are simple standard python strings the function gets as parameter
cur.execute("CREATE USER %s PASSWORD %s", (user, pw))
conn.commit()
Run Code Online (Sandbox Code Playgroud)
Clo*_*eto 17
要通过标识符通过psycopg使用到PostgreSQL AsIs从extensions模块
from psycopg2.extensions import AsIs
import psycopg2
connection = psycopg2.connect(database='db', user='user')
cur = connection.cursor()
cur.mogrify(
'CREATE USER %s PASSWORD %s', (AsIs('someuser'), AsIs('somepassword'))
)
'CREATE USER someuser PASSWORD somepassword'
Run Code Online (Sandbox Code Playgroud)
这也适用于将条件传递给条款,例如order by:
cur.mogrify(
'select * from t order by %s', (AsIs('some_column, another column desc'),)
)
'select * from t order by some_column, another column desc'
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 10
由于OP的编辑显示他正在使用PostgreSQL,因此它的文档是相关的,他们说:
PostgreSQL还接受"转义"字符串常量,它是SQL标准的扩展.通过在开始单引号之前写入字母E(大写或小写)来指定转义字符串常量,例如E'foo'.
换句话说,psycopg正确地为你的字符串生成转义字符串常量(所以,正如文档也说:
在转义字符串中,反斜杠字符()开始一个类似C的反斜杠转义序列,其中反斜杠和后续字符的组合表示一个特殊的字节值.
(它发生的情况也是非原始Python字符串文字的转义约定).
OP的错误显然与此无关,而且,除了研究PostgreSQL优秀文档的优秀想法之外,他不应该担心E'...'这种情况下的形式;-).
| 归档时间: |
|
| 查看次数: |
5816 次 |
| 最近记录: |