So I take it I need to redescribe the DB again using define_table()?  

On Wednesday, March 9, 2016 at 2:59:11 PM UTC-8, Niphlod wrote:
>
> DAL is a database abstraction layer. you need to define tables EVERY time 
> you need to access them. 
> define_table() accidentally creates table if migrations are turned on, but 
> define_table() doesn't map to "create a table" .... it stands for "define 
> an entity that is mapped to a table".
>
> tl;dr: if you kill the process and reinitiate the DAL connection, DAL 
> doesn't do introspection on the tables present on the database. it'll 
> interact only with tables which have been previously defined.
>
> see 
> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer 
> for all the gory details....
>
> On Wednesday, March 9, 2016 at 11:49:38 PM UTC+1, Shayn Raney wrote:
>>
>> I've been prototyping a few projects in a stand alone python script, all 
>> of this out the web2py framework  I am seeing an issue where I can not 
>> access an existing sqlite tables and data I've created/inserted.  But when 
>> I directly connect to it with SQLite console or other tools I have, the 
>> tables and data do exist. 
>>
>> Example DB I create:
>> >>> 
>> >>> from gluon import DAL, Field
>> >>> 
>> >>> db = DAL('sqlite://TestDB.sqlite')
>> >>> db.define_table('person',
>> Field('fname', 'string'),
>> Field('lname', 'string'),
>> Field('building', 'string')
>> )
>> <Table person (id,fname,lname,building)>
>> >>>
>> >>> db.person.insert(fname='Billy', lname='Thorns', building='A')
>> 1L
>> >>> db.person.insert(fname='Judy', lname='Thorns', building='A')
>> 2L
>> >>> db.person.insert(fname='Edd', lname='Spurs', building='A')
>> 3L
>> >>>
>> >>> rows = db(db.person.lname == 'Thorns').select()
>> >>> for e in rows:
>> print e
>>
>> <Row {'building': 'A', 'lname': 'Thorns', 'fname': 'Billy', 'id': 1L}>
>> <Row {'building': 'A', 'lname': 'Thorns', 'fname': 'Judy', 'id': 2L}>
>> >>> db.commit()
>>
>> But when I reopen the 'TestDB.sqlite' file in a new python shell I 
>> suddenly see the data or table does not exist. 
>>
>> >>> from gluon import DAL, Field
>> >>> 
>> >>> db = DAL('sqlite://TestDB.sqlite')
>> >>> rows = db(db.person.lname == 'Thorns').select()
>>
>> Traceback (most recent call last):
>>   File "<pyshell#11>", line 1, in <module>
>>     rows = db(db.person.lname == 'Thorns').select()
>>   File 
>> "C:\Users\Navajo\Documents\code\web2py_win\gluon\packages\dal\pydal\base.py",
>>  
>> line 921, in __getattr__
>>     return BasicStorage.__getattribute__(self, key)
>> AttributeError: 'DAL' object has no attribute 'person'
>> >>> db.tables
>> []
>> >>> 
>>
>> If I open the table within a SQLite console I see there is data:
>>
>> SQLite version 3.11.1 2016-03-03 16:17:53 Enter ".help" for usage hints. 
>> Connected to a transient in-memory database. 
>> Use ".open FILENAME" to reopen on a persistent database. 
>> sqlite> .open TestDB.sqlite 
>> sqlite> select * from person; 
>>
>>  1|||Thorns|A|Billy 
>>  2|||Thorns|A|Judy
>>  3|||Spurs|A|Edd 
>>
>>
>>
>> Any suggestions on how I can reopen a file I've made? 
>>
>>
>>

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to