>>> >>> 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()
>>> 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[]>>>
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
>>> db.tables[]
>>> >>> db.define_table('person', Field('fname', 'string'), Field('lname', 'string'), Field('building', 'string') )<Table person (id,fname,lname,building)>
>>> rows = db(db.person.lname == 'Thorns').select()
>>> rows<Rows (2)>
>>> 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 = DAL('sqlite://TestDB.sqlite', migrate_enabled=False)
So I take it I need to redescribe the DB again using define_table()? Ok, it works! So strange. I'm use to web.py SQL actions.
db = DAL('sqlite://TestDB.sqlite', auto_import=True)
and it will automatically create model definitions based on the migration metadata (the definitions will be missing some web2py-only attributes that don't relate to the database itself, such as validators, labels, etc.).python web2py.py -S myapp -M
This is some rabbit hole, looks like I need to do the following for some odd reason.
db = DAL('sqlite://TestDB.sqlite', migrate_enabled=False)