When I quickstart an SQLAlchemy project with identity turned on, and
setup the database and run tg-admin quickstart -s blah, I get:

Creating tables at mysql://johnny321:[EMAIL PROTECTED]:3302/test2
Traceback (most recent call last):
  File "/usr/local/bin/tg-admin", line 7, in ?
    sys.exit(
  File
"/sw/lib/python2.4/site-packages/TurboGears-0.9a9-py2.4.egg/turbogears/command/base.py",
line 351, in main
    command.run()
  File
"/sw/lib/python2.4/site-packages/TurboGears-0.9a9-py2.4.egg/turbogears/command/base.py",
line 115, in run
    sacommand(sqlobjcommand, sys.argv)
  File "<string>", line 5, in sacommand
  File
"/sw/lib/python2.4/site-packages/TurboGears-0.9a9-py2.4.egg/turbogears/command/base.py",
line 70, in sacreate
    metadata.create_all()
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/schema.py",
line 793, in create_all
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 456, in run_callable
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/schema.py",
line 792, in do
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 298, in create
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 399, in create
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 423, in _run_visitor
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/schema.py",
line 217, in accept_schema_visitor
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/ansisql.py",
line 649, in visit_table
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 685, in execute
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 354, in proxy
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 319, in _execute_raw
  File
"build/bdist.darwin-8.7.0-Power_Macintosh/egg/sqlalchemy/engine/base.py",
line 338, in _execute
sqlalchemy.exceptions.SQLError: (OperationalError) (1170, "BLOB/TEXT
column 'visit_key' used in key specification without a key length")
'\nCREATE TABLE visit_identity (\n\tuser_id INTEGER, \n\tvisit_key TEXT
NOT NULL, \n\tPRIMARY KEY (visit_key), \n\t FOREIGN KEY(user_id)
REFERENCES tg_user (user_id)\n)\n\n' ()


Here is the model.py it created:
from datetime import datetime

from sqlalchemy import *
from sqlalchemy.ext.activemapper import ActiveMapper, column, \
                                    one_to_many, one_to_one,
many_to_many

from turbogears import identity
from turbogears.database import metadata


class Visit(ActiveMapper):
    class mapping:
        __table__ = "visit"
        visit_key = column(String(40), primary_key=True)
        created = column(DateTime, nullable = False,
default=datetime.now)
        expiry = column(DateTime)

    def lookup_visit(cls, visit_key):
        return Visit.get( visit_key );
    lookup_visit= classmethod(lookup_visit)

# tables for SQLAlchemy identity
user_group = Table("user_group", metadata,
                      Column("user_id", Integer,
                              ForeignKey("tg_user.user_id"),
                              primary_key=True),
                      Column("group_id", Integer,
                              ForeignKey("tg_group.group_id"),
                              primary_key=True))

group_permission = Table("group_permission", metadata,
                            Column("group_id", Integer,
                                    ForeignKey("tg_group.group_id"),
                                    primary_key=True),
                            Column("permission_id", Integer,
                                ForeignKey("permission.permission_id"),
                                    primary_key=True))


class VisitIdentity(ActiveMapper):
    class mapping:
        __table__="visit_identity"
        visit_key = column(String, # foreign_key="visit.visit_key",
                          primary_key=True)
        user_id = column(Integer, foreign_key="tg_user.user_id",
index=True)


class Group(ActiveMapper):
    """
    An ultra-simple group definition.
    """
    class mapping:
        __table__="tg_group"
        group_id = column(Integer, primary_key=True)
        group_name = column(Unicode(16), unique=True)
        display_name = column(Unicode(255))
        created = column(DateTime, default=datetime.now)

        users = many_to_many("User", user_group, backref="groups")
        permissions = many_to_many("Permission", group_permission,
                                   backref="groups")


class User(ActiveMapper):
    """
    Reasonably basic User definition. Probably would want additional
attributes.
    """
    class mapping:
        __table__="tg_user"
        user_id = column(Integer, primary_key=True)
        user_name = column(Unicode(16), unique=True)
        email_address = column(Unicode(255), unique=True)
        display_name = column(Unicode(255))
        password = column(Unicode(40))
        created = column(DateTime, default=datetime.now)

        groups = many_to_many("Group", user_group, backref="users")

    def permissions(self):
        perms = set()
        for g in self.groups:
            perms = perms | set(g.permissions)
        return perms
    permissions = property(permissions)


class Permission(ActiveMapper):
    class mapping:
        __table__="permission"
        permission_id = column(Integer, primary_key=True)
        permission_name = column(Unicode(16), unique=True)
        description = column(Unicode(255))

        groups = many_to_many("Group", group_permission,
                              backref="permmissions")


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/turbogears
-~----------~----~----~----~------~----~------~--~---

Reply via email to