使用python和postgres,执行函数中的变量?
关于访问PostgreSQL server的python函数中变量的用法,我有一个问题。例如,以下各项:使用python和postgres,执行函数中的变量?,python,string,postgresql,parameters,psycopg2,Python,String,Postgresql,Parameters,Psycopg2,关于访问PostgreSQL server的python函数中变量的用法,我有一个问题。例如,以下各项: def delete(): cur.execute( """DELETE FROM potluck WHERE name = var_1;""" 但是,如果我想让update函数为var_1引入变量,我该怎么做 例如,我希望函数的形式为: def delete(var_1): cur.execute( """DELETE FROM potluck
def delete():
cur.execute(
"""DELETE FROM potluck
WHERE name = var_1;"""
但是,如果我想让update函数为var_1引入变量,我该怎么做
例如,我希望函数的形式为:
def delete(var_1):
cur.execute(
"""DELETE FROM potluck
WHERE name = %s;""", (var_1))
然而,仅仅是打字是行不通的
此外,在以下情况下如何:
def delete(name, var_1):
cur.execute(
"""DELETE FROM potluck
WHERE %s = %s;""", (name, var_1))
当“name”插入字符串时,我不希望它带有引号
任何帮助都将不胜感激 要传递标识符,请使用
psycopg2.extensions.AsIs
from psycopg2.extensions import AsIs
def update(table_name, var_1, var_2):
cur.execute("""
UPDATE %s
SET %s = 'Y'
WHERE %s = 'John';
""",
(AsIs(table_name), AsIs(var_1), AsIs(var_2))
)
要传递标识符,请使用
psycopg2.extensions.AsIs
from psycopg2.extensions import AsIs
def update(table_name, var_1, var_2):
cur.execute("""
UPDATE %s
SET %s = 'Y'
WHERE %s = 'John';
""",
(AsIs(table_name), AsIs(var_1), AsIs(var_2))
)
已解决:
我明白我做错了什么。我需要做的唯一更改是在var_1之后添加一个逗号,因为:
“对于位置变量绑定,第二个参数必须始终是序列,即使它包含单个变量。请记住,Python需要逗号来创建单个元素元组。”
例如:
def delete(var_1):
cur.execute(
"""DELETE FROM potluck
WHERE name = %s;""", (var_1,))
def delete(name, var_1):
cur.execute(
"""DELETE FROM potluck
WHERE %s = %s;""", (AsIs(name), var_1))
这很有效。我的信息来自:
在第二种情况下,请参考下面使用AsIs的另一个答案。这很有效。例如:
def delete(var_1):
cur.execute(
"""DELETE FROM potluck
WHERE name = %s;""", (var_1,))
def delete(name, var_1):
cur.execute(
"""DELETE FROM potluck
WHERE %s = %s;""", (AsIs(name), var_1))
这就是诀窍。谢谢 已解决:
我明白我做错了什么。我需要做的唯一更改是在var_1之后添加一个逗号,因为:
“对于位置变量绑定,第二个参数必须始终是序列,即使它包含单个变量。请记住,Python需要逗号来创建单个元素元组。”
例如:
def delete(var_1):
cur.execute(
"""DELETE FROM potluck
WHERE name = %s;""", (var_1,))
def delete(name, var_1):
cur.execute(
"""DELETE FROM potluck
WHERE %s = %s;""", (AsIs(name), var_1))
这很有效。我的信息来自:
在第二种情况下,请参考下面使用AsIs的另一个答案。这很有效。例如:
def delete(var_1):
cur.execute(
"""DELETE FROM potluck
WHERE name = %s;""", (var_1,))
def delete(name, var_1):
cur.execute(
"""DELETE FROM potluck
WHERE %s = %s;""", (AsIs(name), var_1))
这就是诀窍。谢谢 通常情况下,表结构是固定的。动态表在大多数情况下都是设计错误。可能的重复肯定是重复的!同样的问题?对复制品?不。通常桌子结构是固定的。动态表在大多数情况下都是设计错误。可能的重复肯定是重复的!同样的问题?对复制品?不,对不起,自从你回答后,我彻底改变了问题,所以我很抱歉浪费了你的时间。然而,我确实找到了答案!谢谢对不起,自从你回答后,我彻底改变了问题,所以我为浪费你的时间而道歉。然而,我确实找到了答案!谢谢