Using python and postgres, variables within execute function?

后端 未结 2 1609
野的像风
野的像风 2020-12-18 14:22

I had a question regarding the usage of variables inside a python function which accesses the PostgreSQL server. For example, the following:

def delete():
           


        
相关标签:
2条回答
  • 2020-12-18 15:08

    SOLVED:

    I see what I was doing wrong. The only change I needed to make was add a comma after var_1, since: "For positional variables binding, the second argument must always be a sequence, even if it contains a single variable. And remember that Python requires a comma to create a single element tuple".

    For example:

    def delete(var_1):
        cur.execute(
        """DELETE FROM potluck 
        WHERE name = %s;""", (var_1,))
    

    This works. I got the info from:

    http://initd.org/psycopg/docs/usage.html#sql-injection

    In the second case, then please reference the other answer below, which uses AsIs. That works. For example:

    def delete(name, var_1):
        cur.execute(
        """DELETE FROM potluck 
        WHERE %s = %s;""", (AsIs(name), var_1))
    

    That does the trick. Thanks!

    0 讨论(0)
  • 2020-12-18 15:09

    To pass identifiers use 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))
        )
    
    0 讨论(0)
提交回复
热议问题