(i´m not an expert here but i faced the same problem)
I moved to postgresql and no more database locks.
sqlite does not allow to have scheduler and your code writting to the
database at the same , or at least that was my understanding...
Regards
António


2017-02-03 14:01 GMT+00:00 Jesse Hunt <jh.trumpe...@gmail.com>:

> Good afternoon all,
>
> I am experiencing issues while trying to perform operations using my DAL
> from a module. I recently moved code from the default controller to a
> module for better coding practices. The code was running previous to the
> move, but now I experience an error ( <class 'sqlite3.OperationalError'>
> database is locked ) everytime I try to run it.
>
> So far, I have tried:
>
>    - various additions of small snippets I thought might help me fix the
>    problem from http://www.web2pyslices.com/slice/show/1478/using-
>    modules-in-web2py
>    - enabling WAL in SQLite from this thread https://groups.google.
>    com/forum/#!msg/web2py/2IDEb658VDw/f5jv54bOH30J;
>    context-place=forum/web2py
>    
> <https://groups.google.com/forum/#!msg/web2py/2IDEb658VDw/f5jv54bOH30J;context-place=forum/web2py>
>
> But after searching for the last 3 days, I can not find a solution that
> matches up with my problem. I will post the code relevant to what is
> happening.
> FYI:
>
>    - There is a scheduler running
>    - The following code is running within a module
>    - I executed the WAL statement in the default controller
>
> from gluon import current
> from gluon.dal import DAL, Field
> import pymongo
> from datetime import datetime as dt
> from datetime import date
>
>
> class mongo_functions:
>     client = None
>     connection = None
>     mongo_db = None
>     db_name = None
>     collection = None
>     collection_name = None
>     dal_name = None
>     dal_db = None
>
>
>     def __init__(self, connection=None, db_name=None, collection_name=None
> , dal_name=None):
>
>
>         # if settings returns nothing, connect to local DB
>         if connection is None:
>             self.connection = 'mongodb://localhost:27017/'
>         if db_name is None:
>             self.db_name = 'test_database'
>         if collection_name is None:
>             self.collection_name = 'test_s_collection'
>         if dal_name is None:
>             self.dal_name = 'sqlite://development.sqlite'
>
>         # added after looking at slice referenced above
>         self.session = current.session
>         self.request = current.request
>         self.response = current.response
>         self.cache = current.cache
>
>
>     def open_connection(self):
>         self.client = pymongo.MongoClient(self.connection)
>         self.mongo_db = self.client[self.db_name]
>         self.collection = self.mongo_db[self.collection_name]
>         self.dal_db = DAL(self.dal_name)
>         print "Connection to Mongo and DAL open"
>
>
>     def close_connection(self):
>         self.collection = None
>         self.mongo_db = None
>         self.client.close()
>         self.dal_db = None
>
>     # the method below refuses to format itself correctly, assume the
> tabulation is fine
>     def query_for_service(self, security_name, field, start_date, end_date
> , session_id):
>          self.dal_db.define_table('export_service',
>                              Field('security_name', notnull=True),
>                              Field('field', notnull=True),
>                              Field('date', type='date'),
>                              Field('value'),
>                              Field('session_id'),
>                              format='%(name)-(field)-(date)s')
>
>
>     queried_document = collection.find_one({'sec_name': security_name,
> 'field': field})
>     # data_set is a list of date/value dictionary objects
>     data_set = queried_document['data']
>
>
>     # a data_point is a dictionary object with date and value pairs.
>     for data_point in data_set:
>         date_object = data_point['date'].date()
>
>
>         print start_date
>         print end_date
>         print date_object
>
>
>         export_list = list()
>
>
>         if date_object > start_date and date_object < end_date:
>             value = data_point['value']
>
>
>             value_dict = {'security_name': security_name, 'field': field,
> 'date': date_object, 'value': value,
>                           'session_id': session_id}
>             export_list.append(value_dict)
>
>
>     self.dal_db.export_service.bulk_insert(export_list)
>     self.dal_db.commit()
>
> *Thank you in advance for your time, I very sincerely appreciate it!*
>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to