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

Dukungan SQLAlchemy dari Skema Postgres

baik ada beberapa cara untuk melakukannya dan itu tergantung pada bagaimana aplikasi Anda terstruktur. Inilah cara paling dasar:

meta = MetaData(schema="client1")

Jika cara aplikasi Anda berjalan adalah satu "klien" pada satu waktu dalam keseluruhan aplikasi, Anda selesai.

Tapi apa yang mungkin salah dengan itu di sini adalah, setiap Tabel dari MetaData itu ada di skema itu. Jika Anda ingin satu aplikasi mendukung banyak klien secara bersamaan (biasanya yang dimaksud dengan "multitenant"), ini akan sulit karena Anda harus membuat salinan MetaData dan menghapus semua pemetaan untuk setiap klien. Pendekatan ini dapat dilakukan, jika Anda benar-benar ingin, cara kerjanya adalah Anda akan mengakses setiap klien dengan kelas yang dipetakan tertentu seperti:

client1_foo = Client1Foo()

dan dalam hal ini Anda akan bekerja dengan resep "nama entitas" di http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName bersama dengan sometable.tometadata() (lihat http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.tometadata).

Jadi katakanlah cara kerjanya adalah beberapa klien di dalam aplikasi, tetapi hanya satu per satu per utas. Sebenarnya, cara termudah untuk melakukannya di Postgresql adalah dengan mengatur jalur pencarian saat Anda mulai bekerja dengan koneksi:

# start request

# new session
sess = Session()

# set the search path
sess.execute("SET search_path TO client1")

# do stuff with session

# close it.  if you're using connection pooling, the
# search path is still set up there, so you might want to 
# revert it first
sess.close()

Pendekatan terakhir adalah mengganti kompiler menggunakan ekstensi @compiles untuk menempelkan nama "skema" di dalam pernyataan. Ini bisa dilakukan, tetapi akan rumit karena tidak ada kait yang konsisten untuk di mana pun "Tabel" dihasilkan. Taruhan terbaik Anda mungkin adalah menyetel jalur pencarian pada setiap permintaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan unik Postgres vs indeks

  2. Bagaimana cara saya masuk dan mengautentikasi ke Postgresql setelah instalasi baru?

  3. Impor CSV PostgreSQL dari baris perintah

  4. Cara mempartisi tabel postgres menggunakan tabel perantara

  5. Postgresql - backup database dan restore pada pemilik yang berbeda?