Postgres/psycopg2 - Inserting array of strings

前端 未结 4 927
耶瑟儿~
耶瑟儿~ 2020-12-30 02:27

I\'m using Postgres 9 and Python 2.7.2 along with psycopg2 and am trying to insert an array of string values with properly escaped quotation marks. Sample:

m         


        
相关标签:
4条回答
  • 2020-12-30 02:49

    When you want to insert an array into a postgreSQL DB via SQL you do it like this:

    INSERT INTO tablename VALUES ('{value1,value2,value3}');
    

    ATTENTION: You need the single quotes to surround the curly braces! So actually you're passing a String/Varchar of a special "array" grammar to the DB

    If I enter your code into a python parser I get something like this:

    '{'Name': 'Guest', 'Details': "['One', 'Two', 'Three']"}'
    

    But PostgreSQL expects something like this:

    '{"Name","Guest","Details",{"One","Two","Three"}}'
    

    Check the manual on Arrays: http://www.postgresql.org/docs/9.0/static/arrays.html

    So either you format the String according to the PostgreSQL "array-grammar" by writing a helper function or you use a library which does that for you.

    0 讨论(0)
  • 2020-12-30 02:51
    def lst2pgarr(alist):
        return '{' + ','.join(alist) + '}'
    
    pyarray = ['pippo', 'minni', 1, 2]
    
    conn = psycopg2.connection (  HERE PUT YOUR CONNECTION STRING  )
    c = conn.cursor()
    
    c.execute('select ... where pgarray_attr = %r' % (lst2pgarr(pyarray))
    c.execute('insert into tab(pgarray_attr) values (%r)' % (lst2pgarr(pyarray))
    
    0 讨论(0)
  • 2020-12-30 02:57

    You have to let psycopg do parameters binding for you: don't try to quote them yourself.

    Psycopg automatically converts a python list of strings into a postgres array. Check http://initd.org/psycopg/docs/usage.html

    0 讨论(0)
  • 2020-12-30 03:11

    If you are going to dump the whole metadata as a string into the table, you can just do:

    cur.execute("insert into meta values (%s);", (str(metadata),))
    
    0 讨论(0)
提交回复
热议问题