J'écris du code en utilisant psycopg2
pour me connecter à une base de données PostGreSQL.Python - créer une chaîne à partir d'éléments dict (pour écrire dans postgresql db)
J'ai beaucoup de différents types de données que je veux écrire sur différentes tables dans ma base de données PostGreSQL. J'essaie d'écrire une fonction qui peut écrire dans chacune des tables en fonction d'une seule variable passée dans la fonction et je veux écrire plus d'une ligne à la fois pour optimiser ma requête. Heureusement, PostGreSQL me permet de le faire: PostGreSQL Insert:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
J'ai couru un problème que j'espérais que quelqu'un pourrait me aider.
Je dois créer une chaîne:
string1 = (value11, value21, value31), (value12, value22, value32)
La variable string1
sera créé en utilisant un dictionnaire avec des valeurs. Jusqu'à présent, j'ai été capable de créer un tuple proche de la structure que je veux. J'ai une liste de dictionnaires. La liste est appelée rows
:
string1 = tuple([tuple([value for value in row.values()]) for row in rows])
Pour le tester, je l'ai créé la variable petite rows
suivante:
rows = [{'id': 1, 'test1': 'something', 'test2': 123},
{'id': 2, 'test1': 'somethingelse', 'test2': 321}]
Lorsque des lignes est passé à travers la pièce au-dessus du code de string1
devient comme suit:
((1, 'something', 123), (2, 'somethingelse', 321))
Comme vu avec string1
J'ai juste besoin d'enlever la parenthèse extrême et en faire une chaîne pour que ce soit comme je le besoin t. Jusqu'à présent, je ne sais pas comment cela est fait. Donc, ma question à vous est: "Comment puis-je formater string1
pour avoir mon format requis?"
Est-ce que 'execute_values' supporte Python3? – Zeliax
@Zeliax Je l'ai testé en Python3. 'execute_values' est nouveau dans Psycopg 2.7. Vérifiez votre version: 'psycopg2 .__ version__' –
Merci. Je viens de le mettre à jour. J'étais sur 2.6.2. Va vérifier si cette méthode fait l'affaire. Dois-je exécuter 'execute' et faire un' conn.commit() 'après la dernière ligne de votre extrait de code? – Zeliax