كيفية استخدام SQLite: ذاكرة: قاعدة البيانات في WebPy ليتم التضمين

StackOverflow https://stackoverflow.com/questions/1252422

سؤال

أريد استخدام SQLite في الذاكرة (": الذاكرة:") DB للاختبارات في Web WebApp. أنا أستخدم nosetests للاختبارات، و Webpy كإطار.

أريد أن أملك DB في الدالة الإعداد ()، ثم قم بتشغيل جميع الاختبارات الخاصة بي. مشكلتي هي أن WebPy يغلق جميع اتصالات DB المفتوحة بعد كل طلب، و SQLite: الذاكرة: DB يستمر فقط حتى تغلق الاتصال، لذلك يتم تشغيل الاختبار الأول فقط بشكل صحيح ويفشل جميع الآخرين بشكل صحيح.

خياراتي إما لتشغيل الاختبارات على قرص مدعوم DB، أو لإعادة إنشاء DB بالكامل في الذاكرة في بداية كل اختبار فردي.

هل تعرف كيف يمكنني منع WebPy من إغلاق اتصالات DB بعد كل طلب؟ هل يمكنك التفكير في أي طريقة أخرى للحصول على ذاكرة SQLite DB التي تستمر لأكثر من طلب واحد باستخدام WebPY؟

هل كانت مفيدة؟

المحلول

ربما يمكنك تشغيل الاختبارات على DB المخزنة على القرص، ولكن باستخدام ذاكرة الوصول العشوائي. وبعد في Windows، يمكنك تثبيت برنامج تشغيل لإعداد قرص RAM (بعض التعليمات هنا). في لينكس، أعتقد أنك تريد إعداد TMPFS..

سيتصرف قرص RAM تماما مثل القرص الثابت، ولكن سيعمل بشكل كامل من الذاكرة، بحيث تفقد بعضا من الحمل في تحميل ملفات تحميل / من القرص الثابت.

نصائح أخرى

غير مختبر:

class NoCloseDB(web.db.SqliteDB):
  def _unload_context(self):
    pass # this keeps the _ctx.db attribute alive
web.db.register_database('sqlite',NoCloseDB) # overrides the previous registration

لاحظ أن هذا لا يمكن أن يعمل إلا إذا قمت بتشغيل Web.py بطريقة تستخدم عملية تشغيل واحدة فقط. إذا تم إرسال طلب عبر عمليات متعددة، فلن يحصل كل واحد على قاعدة بياناتها الخاصة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top