turbogears, elixir, and flush confusion

2 views
Skip to first unread message

anderbubble

unread,
Jun 1, 2007, 4:28:47 PM6/1/07
to SQLElixir
I can't seem to get objectstore.flush() to work the way it does in the
tutorial.

I have the following model.py:

import elixir as se
from turbogears.database import metadata, session

metadata.engine.echo = True

class System (se.Entity):
se.using_options(tablename="system")
se.has_field("id", se.Integer, primary_key=True)
se.has_field("name", se.Unicode, unique=True)

I have created the database:

$ tg-admin sql create
CREATE TABLE system (
id INTEGER NOT NULL,
name TEXT,
PRIMARY KEY (id),
UNIQUE (name)
)


2007-06-01 15:20:23,256 sqlalchemy.engine.base.Engine.0x..10 INFO
CREATE TABLE system (
id INTEGER NOT NULL,
name TEXT,
PRIMARY KEY (id),
UNIQUE (name)
)


2007-06-01 15:20:23,256 INFO sqlalchemy.engine.base.Engine.0x..10 None
2007-06-01 15:20:23,256 sqlalchemy.engine.base.Engine.0x..10 INFO None
2007-06-01 15:20:23,307 INFO sqlalchemy.engine.base.Engine.0x..10
COMMIT

Now, if I try to interact with my model in a python shell, I can't use
objectstore.flush() to commit anything, but it works if I call flush()
on the object itself:

tg-admin shell
(CustomShell)
>>> System(name="system1")
<model.System object at 0x1a3ea50>
>>> se.objectstore.flush()
>>>
System.select()
2007-06-01 15:25:09,382 INFO sqlalchemy.engine.base.Engine.0x..d0
SELECT system.id AS system_id, system.name AS system_name
FROM system ORDER BY system.oid
2007-06-01 15:25:09,382 sqlalchemy.engine.base.Engine.0x..d0 INFO
SELECT system.id AS system_id, system.name AS system_name
FROM system ORDER BY system.oid
2007-06-01 15:25:09,382 INFO sqlalchemy.engine.base.Engine.0x..d0 []
2007-06-01 15:25:09,382 sqlalchemy.engine.base.Engine.0x..d0 INFO []
[]
>>> System(name="system1").flush()
2007-06-01 15:26:19,571 INFO sqlalchemy.engine.base.Engine.0x..d0
BEGIN
2007-06-01 15:26:19,571 sqlalchemy.engine.base.Engine.0x..d0 INFO
BEGIN
2007-06-01 15:26:19,572 INFO sqlalchemy.engine.base.Engine.0x..d0
INSERT INTO system (name) VALUES (?)
2007-06-01 15:26:19,572 sqlalchemy.engine.base.Engine.0x..d0 INFO
INSERT INTO system (name) VALUES (?)
2007-06-01 15:26:19,573 INFO sqlalchemy.engine.base.Engine.0x..d0
['system1']
2007-06-01 15:26:19,573 sqlalchemy.engine.base.Engine.0x..d0 INFO
['system1']
2007-06-01 15:26:19,683 INFO sqlalchemy.engine.base.Engine.0x..d0
COMMIT
2007-06-01 15:26:19,683 sqlalchemy.engine.base.Engine.0x..d0 INFO
COMMIT
>>> System.select()
2007-06-01 15:26:25,337 INFO sqlalchemy.engine.base.Engine.0x..d0
SELECT system.id AS system_id, system.name AS system_name
FROM system ORDER BY system.oid
2007-06-01 15:26:25,337 sqlalchemy.engine.base.Engine.0x..d0 INFO
SELECT system.id AS system_id, system.name AS system_name
FROM system ORDER BY system.oid
2007-06-01 15:26:25,337 INFO sqlalchemy.engine.base.Engine.0x..d0 []
2007-06-01 15:26:25,337 sqlalchemy.engine.base.Engine.0x..d0 INFO []
[<model.System object at 0x1a3e8d0>]
>>>

I'd appreciate any advice.

~jon

Gaetan de Menten

unread,
Jun 2, 2007, 5:39:47 AM6/2/07
to sqle...@googlegroups.com
As I said on IRC, try using the TurboGears specific method. I don't
know turbogears well but, you could try: database.session.flush()


--
Gaëtan de Menten
http://openhex.org

Reply all
Reply to author
Forward
0 new messages