Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和postgres,执行函数中的变量?_Python_String_Postgresql_Parameters_Psycopg2 - Fatal编程技术网

使用python和postgres,执行函数中的变量?

使用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

关于访问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 
    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))

这就是诀窍。谢谢

通常情况下,表结构是固定的。动态表在大多数情况下都是设计错误。可能的重复肯定是重复的!同样的问题?对复制品?不。通常桌子结构是固定的。动态表在大多数情况下都是设计错误。可能的重复肯定是重复的!同样的问题?对复制品?不,对不起,自从你回答后,我彻底改变了问题,所以我很抱歉浪费了你的时间。然而,我确实找到了答案!谢谢对不起,自从你回答后,我彻底改变了问题,所以我为浪费你的时间而道歉。然而,我确实找到了答案!谢谢