hey nick -

yah its actually wrong on all DBs, the "page id" was not being propigated from the "page" to the "magazine_page" table when you are saving ClassifiedPage because i forgot to descend all the way to the base class when running those synchronization rules, instead of just the immediate parent class. this is fixed in 1558.

On May 31, 2006, at 8:10 AM, Nick Joyce wrote:

When I change the engine from sqlite (which works as intended) to MySQL,
I come up with this error:

Traceback (most recent call last):
  File "./test.py", line 182, in ?
    session.flush()
File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line 233,
in flush
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
240, in flush
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
407, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
687, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
648, in _execute_childtasks
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
682, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
634, in _save_objects
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
634, in _save_objects
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
632, in _save_objects
File "build/bdist.linux-i686/egg/sqlalchemy/orm/mapper.py", line 654,
in save_obj
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 240,
in execute
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 264,
in execute_clauseelement
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 280,
in execute_compiled
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 276,
in proxy
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 315,
in _execute_raw
File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 334,
in _execute
sqlalchemy.exceptions.SQLError: (IntegrityError) (1062, "Duplicate entry '0' for key 1") 'INSERT INTO magazine_page (magazine_id, orders) VALUES
(%s, %s)' [1L, '']


I have attached a copy of the output.

Cheers,

Nick

Michael Bayer wrote:
hey Nick -

these are terrific tests, sorry i didnt have this all working ahead of
time but this is how this stuff has ended up getting done in a lot of
cases...

made a few tweaks to polymorphic loading in changeset 1555.   a few
changes to your script, which is attached.  the "default='0'" on all
your ID columns was confusing it in many cases, so i took those out (if you really need those there, we can look into making them less confusing to the mapper). secondly, since you are making a relationship directly to the MagazinePage mapper which you want to be polymorphic towards the ClassifiedPage mapper, that mapper needs its own polymorphic selectable (and i am blown away that this works at all...i hadnt taken it this far):

page_join = polymorphic_union(
    {
        'm': page_table.join(magazine_page_table),
        'c':
page_table.join(magazine_page_table).join(classified_page_table),
        'p': page_table.select(page_table.c.type=='p'),
    }, None, 'page_join')

magazine_join = polymorphic_union(
    {
        'm': page_table.join(magazine_page_table),
        'c':
page_table.join(magazine_page_table).join(classified_page_table),
    }, None, 'page_join')

page_mapper = mapper(Page, page_table, select_table=page_join,
polymorphic_on=page_join.c.type, polymorphic_identity='p')

magazine_page_mapper = mapper(MagazinePage, magazine_page_table,
select_table=magazine_join, inherits=page_mapper,
polymorphic_identity='m', properties={
    'magazine': relation(Magazine, backref=backref('pages'))
})

classified_page_mapper = mapper(ClassifiedPage, classified_page_table,
inherits=magazine_page_mapper, polymorphic_identity='c')

so the attached file does that and also retrieves two ClassifiedPage and
one MagazinePage off the relationship.

Would there be any issue if I converted these scripts into further unit tests to be included with the SA distribution ? youve come across some
patterns that have not been done before and these are very useful.



--------------------------------------------------------------------- ---

import sqlalchemy.mods.threadlocal
from sqlalchemy import *

# set-up tables

metadata = BoundMetaData('sqlite://:memory:')
#metadata = BoundMetaData('postgres://scott:[EMAIL PROTECTED]/test')

zerodefault = {} #{'default':0}
publication_table = Table('publication', metadata,
    Column('id', Integer, primary_key=True, default=None),
    Column('name', String(45), default=''),
)
issue_table = Table('issue', metadata,
    Column('id', Integer, primary_key=True, default=None),
Column('publication_id', Integer, ForeignKey ('publication.id'), **zerodefault),
    Column('issue', Integer, **zerodefault),
)
location_table = Table('location', metadata,
    Column('id', Integer, primary_key=True, default=None),
Column('issue_id', Integer, ForeignKey('issue.id'), **zerodefault),
    Column('ref', CHAR(3), default=''),
Column('location_name_id', Integer, ForeignKey ('location_name.id'), **zerodefault),
)
location_name_table = Table('location_name', metadata,
    Column('id', Integer, primary_key=True, default=None),
    Column('name', String(45), default=''),
)
magazine_table = Table('magazine', metadata,
    Column('id', Integer, primary_key=True, default=None),
Column('location_id', Integer, ForeignKey('location.id'), **zerodefault), Column('page_size_id', Integer, ForeignKey('page_size.id'), **zerodefault),
)
page_table = Table('page', metadata,
    Column('id', Integer, primary_key=True, default=None),
    Column('page_no', Integer, **zerodefault),
    Column('type', CHAR(1), default='p'),
)
magazine_page_table = Table('magazine_page', metadata,
Column('page_id', Integer, ForeignKey('page.id'), primary_key=True, **zerodefault), Column('magazine_id', Integer, ForeignKey('magazine.id'), **zerodefault),
    Column('orders', TEXT, default=''),
)
classified_page_table = Table('classified_page', metadata,
Column('magazine_page_id', Integer, ForeignKey ('magazine_page.page_id'), primary_key=True, **zerodefault),
    Column('titles', String(45), default=''),
)
page_size_table = Table('page_size', metadata,
    Column('id', Integer, primary_key=True, default=None),
    Column('width', Integer, **zerodefault),
    Column('height', Integer, **zerodefault),
    Column('name', String(45), default=''),
)

# set-up mappers

class BaseObject(object):
    def __init__(self, *args, **kwargs):
        for key, value in kwargs.iteritems():
            setattr(self, key, value)
    def __repr__(self):
return "%s(%s)" % (self.__class__.__name__, ",".join("%s=% s" % (key, repr(value)) for key,value in self.__dict__.iteritems() if key[0] != '_' and value))

class Publication(BaseObject):
    pass

class Issue(BaseObject):
    pass

class Location(BaseObject):
    def _get_name(self):
        return self._name

    def _set_name(self, name):
        session = objectstore.get_session()
s = session.query(LocationName).selectfirst (location_name_table.c.name==name)

        if s is not None:
            self._name = s

            return

        found = False

        for i in session.new:
            if isinstance(i, LocationName) and i.name == name:
                self._name = i
                found = True

                break

        if found == False:
            self._name = LocationName(name=name)

    name = property(_get_name, _set_name)

class LocationName(BaseObject):
    pass

class PageSize(BaseObject):
    pass

class Magazine(BaseObject):
    pass

class Page(BaseObject):
    pass

class MagazinePage(Page):
    pass

class ClassifiedPage(MagazinePage):
    pass

publication_mapper = mapper(Publication, publication_table)

issue_mapper = mapper(Issue, issue_table, properties = {
'publication': relation(Publication, backref=backref('issues', cascade="add, delete-orphan")),
})

location_name_mapper = mapper(LocationName, location_name_table)

location_mapper = mapper(Location, location_table, properties = {
    'issue': relation(Issue, backref='locations'),
    '_name': relation(LocationName),
})

issue_mapper.add_property('locations', relation(Location, lazy=False, private=True, backref='issue'))

page_size_mapper = mapper(PageSize, page_size_table)

page_join = polymorphic_union(
    {
        'm': page_table.join(magazine_page_table),
'c': page_table.join(magazine_page_table).join (classified_page_table),
        'p': page_table.select(page_table.c.type=='p'),
    }, None, 'page_join')

magazine_join = polymorphic_union(
    {
        'm': page_table.join(magazine_page_table),
'c': page_table.join(magazine_page_table).join (classified_page_table),
    }, None, 'page_join')

magazine_mapper = mapper(Magazine, magazine_table, properties = {
'location': relation(Location, backref=backref('magazine', uselist=False)),
    'size': relation(PageSize),
})

page_mapper = mapper(Page, page_table, select_table=page_join, polymorphic_on=page_join.c.type, polymorphic_identity='p')

magazine_page_mapper = mapper(MagazinePage, magazine_page_table, select_table=magazine_join, inherits=page_mapper, polymorphic_identity='m', properties={
    'magazine': relation(Magazine, backref=backref('pages'))
})

#magazine_mapper.add_property('pages', relation(MagazinePage, lazy=True, private=True))

classified_page_mapper = mapper(ClassifiedPage, classified_page_table, inherits=magazine_page_mapper, polymorphic_identity='c')

session = objectstore.get_session()

# do some operations

metadata.engine.echo = "debug"

metadata.drop_all()
metadata.create_all()

pub = Publication(name='Test')
issue = Issue(issue=46,publication=pub)

location = Location(ref='ABC',name='London',issue=issue)

page_size = PageSize(name='A4',width=210,height=297)

magazine = Magazine(location=location,size=page_size)
page = ClassifiedPage(magazine=magazine,page_no=1)
page2 = MagazinePage(magazine=magazine,page_no=2)
page3 = ClassifiedPage(magazine=magazine,page_no=3)

session.flush()
session.clear()

session.echo_uow=True
session.flush()
session.clear()
p = session.query(Publication).selectone_by(name='Test')

print p.issues[0].locations[0].magazine.pages

#metadata.drop_all()


--------------------------------------------------------------------- ---



On May 30, 2006, at 4:48 PM, Nick Joyce wrote:

I have now moved on a bit and came up against a brick wall :/

I have a ClassifiedPage instance which inherits from MagazinePage which
in-turn inherits from Page.

Log:

[2006-05-30 21:43:25,602] [engine]: INSERT INTO page (page_no, type)
VALUES (?, ?)
[2006-05-30 21:43:25,602] [engine]: [1, 'c']
[2006-05-30 21:43:25,603] [engine]: INSERT INTO magazine_page (page_id,
magazine_id, orders) VALUES (?, ?, ?)
[2006-05-30 21:43:25,603] [engine]: ['0', 1, '']
[2006-05-30 21:43:25,605] [engine]: INSERT INTO classified_page
(magazine_page_id, titles) VALUES (?, ?)
[2006-05-30 21:43:25,605] [engine]: [0, '']
[2006-05-30 21:43:25,607] [engine]: COMMIT

As you can see, the inheritance tree works, except that the
magazine.page_id and classified.page_id are not being correctly updated.

I have included a patch to the test.py I attached in my previous mail.

Do I need to create a separate polymorphic_union for ClassifiedPage? and
if so, what would that look like?

TIA ...

Nick

Michael Bayer wrote:
Hey Nick -

I ran this test (which is well-written, youve understood the docs very well) with my favorite constraint checker, Postgres, and it does in fact
fail on 0.2.1.  Fortunately, it does not fail when testing with the
fixes I have just made today, i think its the same issue someone else
raised today (a lot has changed with the persistence mechanism with
regards to inheritance structures recently).  Try checking out the
trunk, rev 1554.  also, one slight change to your program:

[[ snip ]]

--- test.py    2006-05-30 21:38:53.000000000 +0100
+++ test.py    2006-05-30 21:41:56.000000000 +0100
@@ -50,7 +50,7 @@
     Column('name', String(45), default=''),
 )

-# mapping objects
+# set-up mappers

 class BaseObject(object):
     def __init__(self, *args, **kwargs):
@@ -103,14 +103,11 @@
     pass

 class MagazinePage(Page):
-    def __init__(self, *args, **kwargs):
-        Page.__init__(self, *args, **kwargs)
+    pass

 class ClassifiedPage(MagazinePage):
     pass

-# define mapping
-
 publication_mapper = mapper(Publication, publication_table)

 issue_mapper = mapper(Issue, issue_table, properties = {
@@ -131,6 +128,7 @@
 page_join = polymorphic_union(
     {
         'm': page_table.join(magazine_page_table),
+        'c':
page_table.join(magazine_page_table).join(classified_page_table),
         'p': page_table.select(page_table.c.type=='p'),
     }, None, 'page_join')

@@ -142,12 +140,10 @@
 page_mapper = mapper(Page, page_table, select_table=page_join,
polymorphic_on=page_join.c.type, polymorphic_identity='p')

 magazine_page_mapper = mapper(MagazinePage, magazine_page_table,
inherits=page_mapper, polymorphic_identity='m', properties={
-    'magazine': relation(Magazine)
+    'magazine': relation(Magazine, backref=backref('pages',
cascade='all, delete-orphan'))
 })

-magazine_mapper.add_property('pages', relation(MagazinePage,
lazy=True, private=True))
-
-#classified_page_mapper = mapper(ClassifiedPage,
classified_page_table, inherits=MagazinePage.mapper,
polymorphic_identity='c')
+classified_page_mapper = mapper(ClassifiedPage,
classified_page_table, inherits=magazine_page_mapper,
polymorphic_identity='c')

 session = objectstore.get_session()

@@ -166,9 +162,10 @@

 magazine = Magazine(location=location,size=page_size)

-page = MagazinePage(magazine=magazine,page_no=1)
+page = ClassifiedPage(magazine=magazine,page_no=1)

 session.flush()
+session.clear()

 '''
 p = session.query(Publication).selectone_by(name='Test')


[2006-05-31 13:06:38,491] [engine]: show table status like 'classified_page'
[2006-05-31 13:06:38,491] [engine]: None
[2006-05-31 13:06:38,493] [engine]:
DROP TABLE classified_page
[2006-05-31 13:06:38,493] [engine]: None
[2006-05-31 13:06:38,494] [engine]: COMMIT
[2006-05-31 13:06:38,494] [engine]: show table status like 'magazine_page'
[2006-05-31 13:06:38,494] [engine]: None
[2006-05-31 13:06:38,495] [engine]:
DROP TABLE magazine_page
[2006-05-31 13:06:38,495] [engine]: None
[2006-05-31 13:06:38,496] [engine]: COMMIT
[2006-05-31 13:06:38,496] [engine]: show table status like 'page'
[2006-05-31 13:06:38,496] [engine]: None
[2006-05-31 13:06:38,497] [engine]:
DROP TABLE page
[2006-05-31 13:06:38,497] [engine]: None
[2006-05-31 13:06:38,498] [engine]: COMMIT
[2006-05-31 13:06:38,498] [engine]: show table status like 'magazine'
[2006-05-31 13:06:38,498] [engine]: None
[2006-05-31 13:06:38,499] [engine]:
DROP TABLE magazine
[2006-05-31 13:06:38,500] [engine]: None
[2006-05-31 13:06:38,500] [engine]: COMMIT
[2006-05-31 13:06:38,500] [engine]: show table status like 'location'
[2006-05-31 13:06:38,501] [engine]: None
[2006-05-31 13:06:38,512] [engine]:
DROP TABLE location
[2006-05-31 13:06:38,512] [engine]: None
[2006-05-31 13:06:38,512] [engine]: COMMIT
[2006-05-31 13:06:38,513] [engine]: show table status like 'issue'
[2006-05-31 13:06:38,513] [engine]: None
[2006-05-31 13:06:38,514] [engine]:
DROP TABLE issue
[2006-05-31 13:06:38,514] [engine]: None
[2006-05-31 13:06:38,514] [engine]: COMMIT
[2006-05-31 13:06:38,515] [engine]: show table status like 'publication'
[2006-05-31 13:06:38,515] [engine]: None
[2006-05-31 13:06:38,516] [engine]:
DROP TABLE publication
[2006-05-31 13:06:38,516] [engine]: None
[2006-05-31 13:06:38,517] [engine]: COMMIT
[2006-05-31 13:06:38,517] [engine]: show table status like 'page_size'
[2006-05-31 13:06:38,517] [engine]: None
[2006-05-31 13:06:38,518] [engine]:
DROP TABLE page_size
[2006-05-31 13:06:38,518] [engine]: None
[2006-05-31 13:06:38,519] [engine]: COMMIT
[2006-05-31 13:06:38,519] [engine]: show table status like 'location_name'
[2006-05-31 13:06:38,519] [engine]: None
[2006-05-31 13:06:38,520] [engine]:
DROP TABLE location_name
[2006-05-31 13:06:38,520] [engine]: None
[2006-05-31 13:06:38,521] [engine]: COMMIT
[2006-05-31 13:06:38,522] [engine]: show table status like 'location_name'
[2006-05-31 13:06:38,523] [engine]: None
[2006-05-31 13:06:38,524] [engine]:
CREATE TABLE location_name(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(45)
)


[2006-05-31 13:06:38,524] [engine]: None
[2006-05-31 13:06:38,526] [engine]: COMMIT
[2006-05-31 13:06:38,526] [engine]: show table status like 'page_size'
[2006-05-31 13:06:38,526] [engine]: None
[2006-05-31 13:06:38,527] [engine]:
CREATE TABLE page_size(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
        width INTEGER,
        height INTEGER,
        name VARCHAR(45)
)


[2006-05-31 13:06:38,527] [engine]: None
[2006-05-31 13:06:38,529] [engine]: COMMIT
[2006-05-31 13:06:38,530] [engine]: show table status like 'publication'
[2006-05-31 13:06:38,530] [engine]: None
[2006-05-31 13:06:38,531] [engine]:
CREATE TABLE publication(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(45)
)


[2006-05-31 13:06:38,531] [engine]: None
[2006-05-31 13:06:38,533] [engine]: COMMIT
[2006-05-31 13:06:38,533] [engine]: show table status like 'issue'
[2006-05-31 13:06:38,533] [engine]: None
[2006-05-31 13:06:38,534] [engine]:
CREATE TABLE issue(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
publication_id INTEGER, FOREIGN KEY (publication_id) REFERENCES publication(id),
        issue INTEGER
)


[2006-05-31 13:06:38,535] [engine]: None
[2006-05-31 13:06:38,536] [engine]: COMMIT
[2006-05-31 13:06:38,537] [engine]: show table status like 'location'
[2006-05-31 13:06:38,537] [engine]: None
[2006-05-31 13:06:38,538] [engine]:
CREATE TABLE location(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
        issue_id INTEGER, FOREIGN KEY (issue_id) REFERENCES issue(id),
        ref CHAR(3),
location_name_id INTEGER, FOREIGN KEY (location_name_id) REFERENCES location_name(id)
)


[2006-05-31 13:06:38,538] [engine]: None
[2006-05-31 13:06:38,540] [engine]: COMMIT
[2006-05-31 13:06:38,541] [engine]: show table status like 'magazine'
[2006-05-31 13:06:38,541] [engine]: None
[2006-05-31 13:06:38,542] [engine]:
CREATE TABLE magazine(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
location_id INTEGER, FOREIGN KEY (location_id) REFERENCES location(id), page_size_id INTEGER, FOREIGN KEY (page_size_id) REFERENCES page_size(id)
)


[2006-05-31 13:06:38,542] [engine]: None
[2006-05-31 13:06:38,544] [engine]: COMMIT
[2006-05-31 13:06:38,544] [engine]: show table status like 'page'
[2006-05-31 13:06:38,544] [engine]: None
[2006-05-31 13:06:38,545] [engine]:
CREATE TABLE page(
        id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
        page_no INTEGER,
        type CHAR(1)
)


[2006-05-31 13:06:38,546] [engine]: None
[2006-05-31 13:06:38,547] [engine]: COMMIT
[2006-05-31 13:06:38,548] [engine]: show table status like 'magazine_page'
[2006-05-31 13:06:38,548] [engine]: None
[2006-05-31 13:06:38,549] [engine]:
CREATE TABLE magazine_page(
page_id INTEGER NOT NULL PRIMARY KEY, FOREIGN KEY (page_id) REFERENCES page(id), magazine_id INTEGER, FOREIGN KEY (magazine_id) REFERENCES magazine(id),
        orders TEXT
)


[2006-05-31 13:06:38,549] [engine]: None
[2006-05-31 13:06:38,551] [engine]: COMMIT
[2006-05-31 13:06:38,551] [engine]: show table status like 'classified_page'
[2006-05-31 13:06:38,552] [engine]: None
[2006-05-31 13:06:38,553] [engine]:
CREATE TABLE classified_page(
magazine_page_id INTEGER NOT NULL PRIMARY KEY, FOREIGN KEY (magazine_page_id) REFERENCES magazine_page(page_id),
        titles VARCHAR(45)
)


[2006-05-31 13:06:38,553] [engine]: None
[2006-05-31 13:06:38,555] [engine]: COMMIT
[2006-05-31 13:06:38,558] [engine]: SELECT location_name.id AS location_name_id, location_name.name AS location_name_name
FROM location_name
WHERE location_name.name = %s ORDER BY location_name.id
 LIMIT 1
[2006-05-31 13:06:38,558] [engine]: ['London']
[2006-05-31 13:06:38,569] [engine]: BEGIN
[2006-05-31 13:06:38,570] [engine]: INSERT INTO location_name (name) VALUES (%s)
[2006-05-31 13:06:38,570] [engine]: ['London']
[2006-05-31 13:06:38,571] [engine]: INSERT INTO publication (name) VALUES (%s)
[2006-05-31 13:06:38,571] [engine]: ['Test']
[2006-05-31 13:06:38,574] [engine]: INSERT INTO issue (publication_id, issue) VALUES (%s, %s)
[2006-05-31 13:06:38,574] [engine]: [1L, 46]
[2006-05-31 13:06:38,576] [engine]: INSERT INTO location (issue_id, ref, location_name_id) VALUES (%s, %s, %s)
[2006-05-31 13:06:38,576] [engine]: [1L, 'ABC', 1L]
[2006-05-31 13:06:38,578] [engine]: INSERT INTO page_size (width, height, name) VALUES (%s, %s, %s)
[2006-05-31 13:06:38,578] [engine]: [210, 297, 'A4']
[2006-05-31 13:06:38,580] [engine]: INSERT INTO magazine (location_id, page_size_id) VALUES (%s, %s)
[2006-05-31 13:06:38,580] [engine]: [1L, 1L]
[2006-05-31 13:06:38,583] [engine]: INSERT INTO page (page_no, type) VALUES (%s, %s)
[2006-05-31 13:06:38,583] [engine]: [2, 'm']
[2006-05-31 13:06:38,585] [engine]: INSERT INTO magazine_page (page_id, magazine_id, orders) VALUES (%s, %s, %s)
[2006-05-31 13:06:38,585] [engine]: [1L, 1L, '']
[2006-05-31 13:06:38,587] [engine]: INSERT INTO page (page_no, type) VALUES (%s, %s)
[2006-05-31 13:06:38,587] [engine]: [1, 'c']
[2006-05-31 13:06:38,588] [engine]: INSERT INTO page (page_no, type) VALUES (%s, %s)
[2006-05-31 13:06:38,589] [engine]: [3, 'c']
[2006-05-31 13:06:38,590] [engine]: INSERT INTO magazine_page (magazine_id, orders) VALUES (%s, %s)
[2006-05-31 13:06:38,590] [engine]: [1L, '']
/usr/lib/python2.4/site-packages/SQLAlchemy-0.2.1-py2.4.egg/ sqlalchemy/engine/default.py:79: Warning: Field 'page_id' doesn't have a default value [2006-05-31 13:06:38,603] [engine]: INSERT INTO magazine_page (magazine_id, orders) VALUES (%s, %s)
[2006-05-31 13:06:38,603] [engine]: [1L, '']
[2006-05-31 13:06:38,604] [engine]: ROLLBACK
Traceback (most recent call last):
  File "./test3.py", line 182, in ?
    session.flush()
File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line 233, in flush File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 240, in flush File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 407, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 687, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 648, in _execute_childtasks File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 682, in execute File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 634, in _save_objects File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 634, in _save_objects File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line 632, in _save_objects File "build/bdist.linux-i686/egg/sqlalchemy/orm/mapper.py", line 654, in save_obj File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 240, in execute File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 264, in execute_clauseelement File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 280, in execute_compiled File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 276, in proxy File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 315, in _execute_raw File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line 334, in _execute sqlalchemy.exceptions.SQLError: (IntegrityError) (1062, "Duplicate entry '0' for key 1") 'INSERT INTO magazine_page (magazine_id, orders) VALUES (%s, %s)' [1L, '']



-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to