python-2.7 - idle - تحميل برنامج python




قاعدة بيانات إدارة اتصال الهرم باستخدام الحد الأدنى من سكلالشيمي (2)

أنا جعلت بداية (بكرت -s كاتب ميبروجيكت) المشروع في الهرم. كيف يمكنني جعل اتصال قاعدة البيانات المتاحة لتطبيقي عند الحاجة

نظرت هنا: الاشتراك قاعدة البيانات كوننكتيون .

في ما يلي الرمز:

@subscriber(NewRequest)
def new_request_subscriber(event):
    request = event.request
    settings = request.registry.settings
    request.db = sqlite3.connect(settings['db'])
    request.add_finished_callback(close_db_connection)

def close_db_connection(request):
    request.db.close()

أنا قلق حول الأداء لأنه سيجعل اتصال قاعدة بيانات لكل طلب سواء كنا أو لا نستخدمها أم لا.

هل هو جيد أو يجب أن أفعل ذلك بطريقة أخرى كيف يمكنني استخدام سكلالشيمي (في الحد الأدنى، قد يكون 10-15 خطوط من التعليمات البرمجية) وجعله أفضل؟

ملاحظة: أنا لا أريد استخدام سكلالشيمي أورم (منحنى التعلم العميق) .لذلك تجنبت (بكرات -s الكيمياء ميبروجيكت)


سكلالشيمي يحل تماما عدد قليل من المشاكل كنت على وشك اكتشاف إذا اخترت أن تفعل كل شيء بنفسك :) مثل الاتصال تجمع وإدارة المعاملات والجلسات موضوع المحلية الخ

إذا كنت لا ترغب في استخدام جزء أورم من سكلالشيمي ويفضل استخدام سكل الحرفية في كل مكان (ويقول مرحبا لحقن سكل عند تلبية ذلك)، يمكنك أن تفعل بسهولة شيء مثل

result = session.execute("""SELECT spam, eggs FROM blah WHERE moo='foo'""")
for row in result:
    print "spam = %s" % row.spam
    print "eggs = %s" % row.eggs

أود أن تبدأ فقط مع التطبيق التي تم إنشاؤها من قالب "الكيمياء" وإزالة الأجزاء التي لن تستخدم. والتي ربما تكون مجرد تعريف MyModel في MyModel وعرض العينة في views.py


يمكنك استخدام config.add_request_method () لتنفيذ ما تحتاج إليه:

def db_connect(request)
    def db_close(request):
        if conn is not None:
            conn.close()
    conn = sqlite3.connect(request.registry.settings['db'])
    request.add_finished_callback(db_close)  
    return conn          

config.add_request_method(db_connect, 'db', reify=True)

ما يفعله هو أنه عند استخدام 'request.db' في التعليمات البرمجية الخاصة بك، فإنه سيتم استدعاء الدالة db_connect () للحصول على اتصال، ريفي = صحيح يعني أنه سوف استدعاء فقط وظيفة مرة واحدة للحصول على اتصال. و add_finished_callback () استدعاء الدالة db_close () لإغلاق الاتصال.

وبهذه الطريقة سيتم تهيئة اتصال داباباس فقط عند استخدام request.db، وسيتم إغلاق عندما تم تهيئة اتصال آ.