Thread: [SQLObject] The Gadfly Backend
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Marek K. <pyt...@we...> - 2004-04-26 10:54:13
|
Gadfly can be used both embedded (like sqlite) and standalone (like mysql), although I havent tested this before. But I'll only work on the embedded version. First I checked out SQLObject revision 104. I started the work by copying the sqlite package and replacing all 'sqlite' by 'gadfly'. (Gadfly is probably very like SQLite). Then I added to the main __init__.py. In the file gadflyconnection.py I modified the code to open a gadfly database. That's where I paused. I also modified the simpleperson.py for the Gadfly backend: File: simpleperson.py: from sqlobject import * __connection__ = GadflyConnection('gad.fly.db') class Person(SQLObject): _connection = __connection__ firstName = StringCol() middleInitial = StringCol(length=1, default=None) lastName = StringCol() Person.dropTable(ifExists=True) Person.createTable() Trying to run it: File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable if ifExists and not cls._connection.tableExists(cls._table): AttributeError: 'NoneType' object has no attribute 'tableExists' That doesn't wonder. But where in sqlite can I find tableExists? greets, Marek |
From: Philippe N. <sw...@fr...> - 2004-04-26 11:08:02
|
On Mon, Apr 26, 2004 at 01:08:15PM +0200, Marek Kubica wrote: >=20 > Trying to run it: > File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable > if ifExists and not cls._connection.tableExists(cls._table): > AttributeError: 'NoneType' object has no attribute 'tableExists' >=20 > That doesn't wonder. But where in sqlite can I find tableExists? >=20 > greets, > Marek >=20 >=20 Have a look at sqlobject/sqlite/sqliteconnection.py --=20 Philippe Normand |
From: Marek K. <pyt...@we...> - 2004-04-26 12:15:42
|
Hello, On Mon, 26 Apr 2004 12:55:44 +0200 Philippe Normand <sw...@fr...> wrote: > > Have a look at sqlobject/sqlite/sqliteconnection.py Already done (I've taken this file as base for gadflyconnection.py). greets, Marek |
From: Scott R. <sc...@to...> - 2004-04-26 11:10:53
|
On Mon, 2004-04-26 at 07:08, Marek Kubica wrote: > Trying to run it: > File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable > if ifExists and not cls._connection.tableExists(cls._table): > AttributeError: 'NoneType' object has no attribute 'tableExists' > > That doesn't wonder. But where in sqlite can I find tableExists? > First, you need to read your error. This is a basic python error, stating that your code is trying to call a method of None, of which none exist. Something failed to initialize. As for the question you thought you were asking: You may want to try a grep in the sqlobject source. _connection isn't a sqllite object here, it's a SO SQLiteConnection... Might I suggest you go and really deeply understand how SO (or at least it's connection management) and python work before trying this? Otherwise, you'll wind up asking a lot more questions that you could easily answer yourself. |
From: Marek K. <pyt...@we...> - 2004-04-26 12:16:03
|
On Mon, 26 Apr 2004 07:10:37 -0400 Scott Russell <sc...@to...> wrote: > On Mon, 2004-04-26 at 07:08, Marek Kubica wrote: > > Trying to run it: > > File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable > > if ifExists and not cls._connection.tableExists(cls._table): > > AttributeError: 'NoneType' object has no attribute 'tableExists' > > > > That doesn't wonder. But where in sqlite can I find tableExists? > > > First, you need to read your error. This is a basic python error, > stating that your code is trying to call a method of None, of which > none exist. Something failed to initialize. In my file there is a line gadfly = None but in the sqlite file it's the same sqlite = None > As for the question you thought you were asking: You may want to try a > grep in the sqlobject source. _connection isn't a sqllite object here, > it's a SO SQLiteConnection... > Might I suggest you go and really deeply understand how SO (or at > least it's connection management) and python work before trying this? > Otherwise, you'll wind up asking a lot more questions that you could > easily answer yourself. Where I can find informations about SO? greets, Marek |
From: Scott R. <sc...@to...> - 2004-04-26 12:32:41
|
On Mon, 2004-04-26 at 08:29, Marek Kubica wrote: > Where I can find informations about SO? SO is SqlObject, and the only real way to learn how the source is put together is by reading it. In this case, grep tableExists /path/to/sqlobject/source will answer the question you are asking, but probably not solve your problem. |
From: Ian B. <ia...@co...> - 2004-04-26 15:56:42
|
Marek Kubica wrote: > On Mon, 26 Apr 2004 07:10:37 -0400 > Scott Russell <sc...@to...> wrote: > > >>On Mon, 2004-04-26 at 07:08, Marek Kubica wrote: >> >>>Trying to run it: >>>File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable >>> if ifExists and not cls._connection.tableExists(cls._table): >>>AttributeError: 'NoneType' object has no attribute 'tableExists' >>> >>>That doesn't wonder. But where in sqlite can I find tableExists? >>> > > >>First, you need to read your error. This is a basic python error, >>stating that your code is trying to call a method of None, of which >>none exist. Something failed to initialize. > > In my file there is a line > gadfly = None > but in the sqlite file it's the same > sqlite = None This is for lazy loading -- you'll note that SQLiteConnection imports sqlite in its __init__. But you're probably encountering a more mundane problem where you aren't giving your SQLObject subclass a _connection object, so the connection is simply None. Ian |
From: Marek K. <pyt...@we...> - 2004-04-28 18:26:36
|
On Mon, 26 Apr 2004 10:55:56 -0500 Ian Bicking <ia...@co...> wrote: > > This is for lazy loading -- you'll note that SQLiteConnection imports > sqlite in its __init__. > > But you're probably encountering a more mundane problem where you > aren't giving your SQLObject subclass a _connection object, so the > connection is simply None. I've checked out the newest revision (105) and I tried this script: # SNIP from sqlobject import * __connection__ = SQLiteConnection('database.db') #__connection__ = GadflyConnection('gad.fly.db') class Person(SQLObject): _connection = __connection__ firstName = StringCol() middleInitial = StringCol(length=1, default=None) lastName = StringCol() Person.dropTable(ifExists=True) Person.createTable() p = Person(firstName="John", lastName="Doe") print p print p.firstName p.middleInitial = 'Q' print p.middleInitial p2 = Person.get(1) print p2 print p is p2 # SNIP This is a lighter version of simpleperson.py from the examples. __connection__ points to the SQLite backend. File "C:\sqlobject\sqlobject\main.py", line 943, in dropTable if ifExists and not cls._connection.tableExists(cls._table): AttributeError: 'NoneType' object has no attribute 'tableExists' The same error happens! My gadfly backend has the same problem, since it uses 90% of the sqlite code. Is anybody (more experienced than I) working on the sqlite code? greets, Marek |
From: Philippe N. <sw...@fr...> - 2004-04-28 19:29:34
|
On Wed, Apr 28, 2004 at 06:28:00PM +0200, Marek Kubica wrote: > I've checked out the newest revision (105) and I tried this script: >=20 > # SNIP > from sqlobject import * > __connection__ =3D SQLiteConnection('database.db') > #__connection__ =3D GadflyConnection('gad.fly.db') > class Person(SQLObject): > _connection =3D __connection__ > firstName =3D StringCol() > middleInitial =3D StringCol(length=3D1, default=3DNone) > lastName =3D StringCol() >=20 If you're using sqlobject 0.6 (SVN), use the new URI system: __connection__ =3D dbconnection.connectionForURI('sqlite:///tmp/database.db= ') May it be helpfull to raise some Exception if somebody tries to use the old system ... --=20 Philippe Normand |
From: Marek K. <pyt...@we...> - 2004-04-30 12:39:08
|
On Wed, 28 Apr 2004 21:17:06 +0200, Philippe Normand wrote: > If you're using sqlobject 0.6 (SVN), use the new URI system: > > __connection__ = > dbconnection.connectionForURI('sqlite:///tmp/database.db') > > May it be helpfull to raise some Exception if somebody tries to use > the old system ... So the old system won't be supported? greets, Marek |
From: Philippe N. <sw...@fr...> - 2004-04-30 12:58:08
|
On Fri, Apr 30, 2004 at 01:48:44PM +0200, Marek Kubica wrote: > On Wed, 28 Apr 2004 21:17:06 +0200, Philippe Normand wrote: > > If you're using sqlobject 0.6 (SVN), use the new URI system: > >=20 > > __connection__ =3D > > dbconnection.connectionForURI('sqlite:///tmp/database.db') > >=20 > > May it be helpfull to raise some Exception if somebody tries to use > > the old system ... > So the old system won't be supported? >=20 Well it could be supported. In my opinion the URI system is far more powerfull. For instance, if I=20 want to store db login/passwd, etc in a config file it is not so trivial=20 to handle Connection types. URIs can be easily stored in config files,=20 all the informations (db type, login, passwd, db name) reside in a simple= =20 string. --=20 Philippe Normand |
From: Marek K. <pyt...@we...> - 2004-05-01 09:26:38
|
On Fri, 30 Apr 2004 14:45:46 +0200 Philippe Normand <sw...@fr...> wrote: > In my opinion the URI system is far more powerfull. For instance, if I > want to store db login/passwd, etc in a config file it is not so > trivial to handle Connection types. URIs can be easily stored in > config files, all the informations (db type, login, passwd, db name) > reside in a simple string. I absolutely agree, but I thought there would be some releases with botz systems. greets, Marek |
From: Ian B. <ia...@co...> - 2004-04-30 15:43:10
|
Philippe Normand wrote: > On Wed, Apr 28, 2004 at 06:28:00PM +0200, Marek Kubica wrote: > >>I've checked out the newest revision (105) and I tried this script: >> >># SNIP >>from sqlobject import * >>__connection__ = SQLiteConnection('database.db') >>#__connection__ = GadflyConnection('gad.fly.db') >>class Person(SQLObject): >> _connection = __connection__ >> firstName = StringCol() >> middleInitial = StringCol(length=1, default=None) >> lastName = StringCol() >> > > > If you're using sqlobject 0.6 (SVN), use the new URI system: > > __connection__ = dbconnection.connectionForURI('sqlite:///tmp/database.db') > > May it be helpfull to raise some Exception if somebody tries to use > the old system ... I have to look at this more, but the old system is supposed to work, and should continue to work at least for a release or two (or more). |
From: Marek K. <pyt...@we...> - 2004-05-01 09:26:36
|
On Fri, 30 Apr 2004 10:42:57 -0500 Ian Bicking <ia...@co...> wrote: > I have to look at this more, but the old system is supposed to work, > and should continue to work at least for a release or two (or more). That's why I wondered. greets, Marek |