[sqlalchemy] using __mapper_args__ with Declarative ORM

2010-11-16 Thread Royce
Using version 0.6.5 under python 2.6.5 even simple augments to
__mapper_args__ variable course errors

E.g.
from sqlalchemy import *
from sqlalchemy.dialects.mysql import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class CourseAliases(Base):
__tablename__ = 'CourseAliases'

alias= Column(CHAR(length=7), nullable=False)
year = Column(INTEGER())
course_stream_id = Column(INTEGER(), nullable=False)
auto_gen = Column(CHAR(length=1), nullable=False)

__mapper_args__ = {
'primary_key': course_stream_id
}


If I try to import it the resultant errors are

from tables import CourseAliases2
Traceback (most recent call last):
  File stdin, line 1, in module
  File tables/CourseAliases2.py, line 7, in module
class CourseAliases(Base):
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/ext/declarative.py, line 1231, in __init__
_as_declarative(cls, classname, cls.__dict__)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/ext/declarative.py, line 1224, in
_as_declarative
**mapper_args)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/orm/__init__.py, line 861, in mapper
return Mapper(class_, local_table, *args, **params)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/orm/mapper.py, line 217, in __init__
self._configure_pks()
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/orm/mapper.py, line 481, in _configure_pks
if self.primary_key_argument:
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/sql/expression.py, line 1423, in __nonzero__
raise TypeError(Boolean value of this clause is not defined)
TypeError: Boolean value of this clause is not defined

I know I can add the primary_key=True to a Column but what I actually
wanted to do is make a multiple column primary key

E.g
__mapper_args__ = {
'primary_key':  [course_stream_id,alias]
}

this produces a different error.

Traceback (most recent call last):
  File stdin, line 1, in module
  File tables/CourseAliases2.py, line 7, in module
class CourseAliases(Base):
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/ext/declarative.py, line 1231, in __init__
_as_declarative(cls, classname, cls.__dict__)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
py2.6.egg/sqlalchemy/ext/declarative.py, line 1048, in
_as_declarative
mapper_args[k] = column_copies.get(v,v)
TypeError: Error when calling the metaclass bases
unhashable type: 'list'

What am I doing wrong ? I am fairly sure I am only doing what the
documentation says.

Thanks for any help
Royce



-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] using __mapper_args__ with Declarative ORM

2010-11-16 Thread Michael Bayer
primary_key argument to mapper is a list

primary_key=[my_column, my_other_column, ..]

clearly this is a bug: http://www.sqlalchemy.org/docs/orm/mapper_config.html#, 
ill change that now


I'll see if I can add a scalar-list adapter in 0.7 for that arg


On Nov 16, 2010, at 4:53 PM, Royce wrote:

 Using version 0.6.5 under python 2.6.5 even simple augments to
 __mapper_args__ variable course errors
 
 E.g.
 from sqlalchemy import *
 from sqlalchemy.dialects.mysql import *
 from sqlalchemy.ext.declarative import declarative_base
 
 Base = declarative_base()
 
 class CourseAliases(Base):
__tablename__ = 'CourseAliases'
 
alias= Column(CHAR(length=7), nullable=False)
year = Column(INTEGER())
course_stream_id = Column(INTEGER(), nullable=False)
auto_gen = Column(CHAR(length=1), nullable=False)
 
__mapper_args__ = {
'primary_key': course_stream_id
}
 
 
 If I try to import it the resultant errors are
 
 from tables import CourseAliases2
 Traceback (most recent call last):
  File stdin, line 1, in module
  File tables/CourseAliases2.py, line 7, in module
class CourseAliases(Base):
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/ext/declarative.py, line 1231, in __init__
_as_declarative(cls, classname, cls.__dict__)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/ext/declarative.py, line 1224, in
 _as_declarative
**mapper_args)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/orm/__init__.py, line 861, in mapper
return Mapper(class_, local_table, *args, **params)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/orm/mapper.py, line 217, in __init__
self._configure_pks()
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/orm/mapper.py, line 481, in _configure_pks
if self.primary_key_argument:
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/sql/expression.py, line 1423, in __nonzero__
raise TypeError(Boolean value of this clause is not defined)
 TypeError: Boolean value of this clause is not defined
 
 I know I can add the primary_key=True to a Column but what I actually
 wanted to do is make a multiple column primary key
 
 E.g
 __mapper_args__ = {
'primary_key':  [course_stream_id,alias]
}
 
 this produces a different error.
 
 Traceback (most recent call last):
  File stdin, line 1, in module
  File tables/CourseAliases2.py, line 7, in module
class CourseAliases(Base):
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/ext/declarative.py, line 1231, in __init__
_as_declarative(cls, classname, cls.__dict__)
  File /usr/pkg/lib/python2.6/site-packages/SQLAlchemy-0.6.5-
 py2.6.egg/sqlalchemy/ext/declarative.py, line 1048, in
 _as_declarative
mapper_args[k] = column_copies.get(v,v)
 TypeError: Error when calling the metaclass bases
unhashable type: 'list'
 
 What am I doing wrong ? I am fairly sure I am only doing what the
 documentation says.
 
 Thanks for any help
 Royce
 
 
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To post to this group, send email to sqlalch...@googlegroups.com.
 To unsubscribe from this group, send email to 
 sqlalchemy+unsubscr...@googlegroups.com.
 For more options, visit this group at 
 http://groups.google.com/group/sqlalchemy?hl=en.
 

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.