PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

SQLalchemy tidak melakukan perubahan saat mengatur peran

Masalahnya di sini bagaimana sqlalchemy memutuskan untuk mengeluarkan komit setelah setiap pernyataan.

jika sebuah teks diteruskan ke engine.execute , sqlalchemy akan mencoba menentukan apakah teks adalah DML atau DDL menggunakan ekspresi reguler berikut. Anda dapat menemukannya di sumber di sini

AUTOCOMMIT_REGEXP = re.compile(
    r"\s*(?:UPDATE|INSERT|CREATE|DELETE|DROP|ALTER)", re.I | re.UNICODE
)

Ini hanya mendeteksi kata-kata jika mereka berada di awal teks, mengabaikan spasi putih di depan. Jadi, saat percobaan pertama Anda # works fine , contoh kedua gagal mengenali bahwa komit perlu dikeluarkan setelah pernyataan dieksekusi karena kata pertama adalah SET .

Sebagai gantinya, sqlalchemy mengeluarkan rollback, sehingga # appears to succeed/does NOT throw any error .

solusi paling sederhana adalah secara manual melakukan.

contoh:

engine.execute("SET ROLE read_write; CREATE table testpublic (id int, val text); COMMIT;")

atau, bungkus sql dalam text dan atur autocommit=True , seperti yang ditunjukkan dalam dokumentasi

stmt = text('set role read_write; create table testpublic (id int, val text);').execution_options(autocommit=True)
e.execute(stmt)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PgBouncer 1.7 – “Warna Bervariasi Setelah Kebangkitan”

  2. cara memeriksa jenis nilai di postgres

  3. Simpan keluaran PL/pgSQL dari PostgreSQL ke file CSV

  4. Bagaimana cara membersihkan dan menginstal ulang postgresql secara menyeluruh di ubuntu?

  5. Oracle ke PostgreSQL:MULAI DENGAN/HUBUNGKAN OLEH