psycopg2 inserta el diccionario de python como json

Quiero insertar un diccionario de python como json en mi base de datos postgresql (a través de python y psycopg2). Yo tengo:

... thedictionary = {'price money': '$1', 'name': 'Google', 'color': '', 'imgurl': 'http://sofes.miximages.com/python/nav_logo225.png', 'charateristics': 'No Description', 'store': 'google'} ... cur.execute("INSERT INTO product(store_id, url, price, charecteristics, color, dimensions) VALUES (%d, %s, %s, %d, %s, %s)", (1, 'http://www.google.com', '$20', thedictionary, 'red', '8.5x11')) ... 

Y le da el mensaje de error:

  cur.execute("INSERT INTO product(store_id, url, price, charecteristics, color, dimensions) VALUES (%d, %s, %s, %d, %s, %s)", (1, 'http://www.google.com', '$20', thedictionary, 'red', '8.5x11')) psycopg2.ProgrammingError: can't adapt type 'dict' 

No estoy seguro de cómo proceder desde aquí. No puedo encontrar nada en Internet sobre cómo hacer exactamente este tipo de cosas y soy muy nuevo en psycopg2.

 cur.execute("INSERT INTO product(store_id, url, price, charecteristics, color, dimensions) VALUES (%s, %s, %s, %s, %s, %s)", (1, 'http://www.google.com', '$20', json.dumps(thedictionary), 'red', '8.5x11')) 

Eso resolverá su problema. Sin embargo, realmente debería almacenar claves y valores en sus propias columnas separadas. Para recuperar el diccionario, haz:

 cur.execute('select charecteristics from product where store_id = 1') dictionary = json.loads(cur.fetchone()[0]) 

Espero eso ayude.

Puede usar psycopg2.extras.Json para convertir dict a json que acepta postgre.

 from psycopg2.extras import Json thedictionary = {'price money': '$1', 'name': 'Google', 'color': '', 'imgurl': 'http://sofes.miximages.com/python/nav_logo225.png', 'charateristics': 'No Description', 'store': 'google'} item ={ "store_id":1, "url": 'http://www.google.com', "price":'$20', "charecteristics":Json(thedictionary), "color":'red', "dimensions":'8.5x11' } def sql_insert(tableName, data_dict): ''' INSERT INTO product (store_id, url, price, charecteristics, color, dimensions) VALUES (%(store_id)s, %(url)s, %(price)s, %(charecteristics)s, %(color)s, %(dimensions)s ); ''' sql = ''' INSERT INTO %s (%s) VALUES (%%(%s)s ); ''' % (tableName, ', '.join(data_dict), ')s, %('.join(data_dict)) return sql tableName = 'product' sql = sql_insert(tableName, item) cur.execute(sql, item) 

Para más información, puede ver el documento de office .

 class psycopg2.extras.Json(adapted, dumps=None) An ISQLQuote wrapper to adapt a Python object to json data type. Json can be used to wrap any object supported by the provided dumps function. If none is provided, the standard json.dumps() is used (simplejson for Python < 2.6; getquoted() will raise ImportError if the module is not available). dumps(obj) Serialize obj in JSON format. The default is to call json.dumps() or the dumps function provided in the constructor. You can override this method to create a customized JSON wrapper.