Here is an attached sample of my problem.

You can create a User, u,  and a Folder, f. Assign ownership via a 
simple f.owner = u.
You can do an :
objectstore.save(u)
objectstore.save(f)

You can see relations via
print f.owner
print u.objects

But this can not be saved into the database. An
objectstore.flush() will fail with a :

SQLError: (IntegrityError) bases.id may not be NULL 'INSERT INTO bases 
(owner_id, creation_date, modification_date, type, title) VALUES (?, ?, 
?, ?, ?)' [1, None, None, 'folder', "Le titre de l'object"]


Everything works fine as soon as you remove the owner relation and the 
owner_id in the BASES table declaration.




Michael Bayer a écrit :
> it all looks fine to me, youd have to show me something more specific.
>
>
> >
>
>   



--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---
# -*- coding: UTF-8 -*-
# ***** BEGIN LICENSE BLOCK *****
# This file is part of NOMDUPRODUIT.
# Copyright (c) 2004 laurent Rahuel and contributors. All rights
# reserved.
#
# NOMDUPRODUIT is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# NOMDUPRODUIT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NOMDUPRODUIT; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# ***** END LICENSE BLOCK *****
from sqlalchemy import mapper, relation, polymorphic_union, create_session
from sqlalchemy import BoundMetaData, Table, Column, Integer, DateTime, Date, Time, String, Boolean, Float, ForeignKey
from datetime import datetime

metadata = BoundMetaData("sqlite:///:memory:")
objectstore = create_session()

#
# Tables definition
#
USERS = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(255), nullable=False),
    )

BASES = Table('bases', metadata,
    Column('id', Integer, primary_key=True),
    Column('owner_id', Integer, ForeignKey('users.id'), primary_key=True),
    Column('creation_date', DateTime),
    Column('modification_date', DateTime),
    Column('type', String(255), nullable=False),
    Column('title', String(255), nullable=False),
    )

FOLDERS = Table('folders', metadata,
    Column('id', Integer, ForeignKey('bases.id'), primary_key=True),
    Column('description', String()),
    )

#
# Class definition
#
class User(object):
    pass

class Base(object):
    pass

class Folder(Base):
    pass

mapper(User, USERS)
base_join = polymorphic_union(
    {
     'folder':BASES.join(FOLDERS),
     'base':BASES.select(BASES.c.type=='base'),
    }, None, 'pjoin')

base_mapper = mapper(Base, BASES, select_table=base_join, polymorphic_on=base_join.c.type, polymorphic_identity='base',properties={'owner': relation(User, primaryjoin=BASES.c.owner_id==USERS.c.id, backref='objects')})
mapper(Folder, FOLDERS, inherits=base_mapper, polymorphic_identity='folder',)


metadata.drop_all()
metadata.create_all()

u = User()
u.name = "Laurent"
f = Folder()
f.title = "Le titre de l'object"
f.owner = u


Reply via email to