Quand j'essaye d'ajouter une ligne avec "Heroku Postgres - Add-ons" de heroku, je me fâche avec "ERREUR: impossible d'exécuter ALTER TABLE dans une transaction en lecture seule".
Créez une classe pour accéder à la base de données Postgres à partir d'un tel python.
import os
import psycopg2
import json
import pprint
class PostgreSql:
def __init__(self):
self.conn = self.get_connection()
self.cur = self.conn.cursor()
##############################################
#Fonction d'acquisition de connexion DB
#
def get_connection(self):
dsn = "host=XXXXXXXXXXXXXX\
port=XXXX \
dbname=XXXXXXXXXX \
user=XXXXXXXXX \
password=XXXXXXXXXXXXXX"
return psycopg2.connect(dsn)
##############################################
#insérer une fonction
#
def insert(self, sqlStr):
self.cur.execute('BEGIN')
self.cur.execute(sqlStr)
self.cur.execute('COMMIT')
##############################################
#Fonction de sélection avec mysql
#
def select(self, sqlStr):
self.cur.execute(sqlStr)
return list(self.cur)
if __name__ == "__main__":
psql = PostgreSql()
##############################################
#Ajouter une colonne
#
sql = "ALTER TABLE tbl_name ADD COLUMN category2 text;"
psql.insert(sql)
Ajoutons une colonne en utilisant la fonction d'insertion de la classe psql que nous avons créée! !!
sql = "ALTER TABLE tbl_name ADD COLUMN category2 text;"
psql.insert(sql)
S'il est sélectionné et ajouté sur le tableau de bord d'heroku, c'est fait !!
C'est la solution pour "ERREUR: impossible d'exécuter ALTER TABLE dans une transaction en lecture seule".