PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres स्कीमा का SQLAlchemy समर्थन

वैसे इस पर जाने के कुछ तरीके हैं और यह इस बात पर निर्भर करता है कि आपका ऐप कैसे संरचित है। यहाँ सबसे बुनियादी तरीका है:

meta = MetaData(schema="client1")

यदि आपका ऐप जिस तरह से चलता है वह पूरे एप्लिकेशन के भीतर एक समय में एक "क्लाइंट" है, तो आपका काम हो गया।

लेकिन इसमें क्या गलत हो सकता है, उस मेटाडेटा की प्रत्येक तालिका उस स्कीमा पर है। यदि आप चाहते हैं कि एक एप्लिकेशन एक साथ कई क्लाइंट का समर्थन करे (आमतौर पर "मल्टीटेनेंट" का क्या अर्थ है), तो यह बोझिल होगा क्योंकि आपको मेटाडेटा की एक प्रति बनाने और प्रत्येक क्लाइंट के लिए सभी मैपिंग को डुप्लिकेट करने की आवश्यकता होगी। यह दृष्टिकोण किया जा सकता है, यदि आप वास्तव में चाहते हैं, जिस तरह से यह काम करता है, आप प्रत्येक क्लाइंट को एक विशेष मैप किए गए वर्ग के साथ एक्सेस करेंगे जैसे:

client1_foo = Client1Foo()

और उस स्थिति में आप http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName पर sometable.tometadata() के संयोजन में "इकाई का नाम" नुस्खा के साथ काम कर रहे होंगे। (देखें http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.tometadata)।

तो मान लें कि जिस तरह से यह वास्तव में काम करता है वह ऐप के भीतर एकाधिक क्लाइंट है, लेकिन प्रति थ्रेड एक समय में केवल एक ही है। वास्तव में, Postgresql में ऐसा करने का सबसे आसान तरीका यह होगा कि जब आप किसी कनेक्शन के साथ काम करना शुरू करें तो खोज पथ सेट करें:

# 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()

अंतिम दृष्टिकोण बयानों में "स्कीमा" नाम को चिपकाने के लिए @compiles एक्सटेंशन का उपयोग करके कंपाइलर को ओवरराइड करना होगा। यह करने योग्य है, लेकिन मुश्किल होगा क्योंकि हर जगह "टेबल" उत्पन्न होने के लिए लगातार हुक नहीं होता है। आपकी सबसे अच्छी शर्त शायद प्रत्येक अनुरोध पर खोज पथ निर्धारित करना है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में सीलिंग () कैसे काम करती है

  2. PostgreSQL के लिए सर्वश्रेष्ठ अलर्ट और अधिसूचना उपकरण

  3. डुप्लिकेट प्रविष्टियों को कैसे हटाएं?

  4. PostgreSQL:डेटाटाइम के बीच

  5. पोस्टग्रेएसक्यूएल क्या है?