I've recently come across a small issue, maybe not even an important one but I 
wonder why it's happened.  I typically pass None as my Column type whenever I 
use a ForeignKey, as per the docs at 
http://www.sqlalchemy.org/docs/reference/sqlalchemy/schema.html#sqlalchemy.schema.Column

"""
If this column also contains a ForeignKey, the type argument may be left as 
None in which case the type assigned will be that of the referenced column.
"""

Now suddenly this breaks some of my test code which creates tables 
individually.  Consider this example:


from sqlalchemy import *

metadata = MetaData("sqlite:///")

table1 = Table(
    'table1', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(50)),
    )

table2 = Table(
    'table2', metadata,
    Column('table1_id', None, ForeignKey('table1.id')),
    Column('description', String(255)),
    )

# This works fine...
metadata.create_all()

# If I do _not_ call create_all() but instead do this, then I get an error...
table1.create()
table2.create()


Traceback (most recent call last):
  File "C:\Documents and Settings\lance\Source\rattail\test.py", line 23, in 
<module>
    table2.create()
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\schema.py",
 line 413, in create
    bind.create(self, checkfirst=checkfirst)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 1504, in create
    self._run_visitor(ddl.SchemaGenerator, entity, connection=connection, 
**kwargs)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 1535, in _run_visitor
    visitorcallable(self.dialect, conn, **kwargs).traverse_single(element)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\visitors.py",
 line 77, in traverse_single
    return meth(obj, **kw)
  File 
"C:\Python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\ddl.py",
 line 58, in visit_table
    self.connection.execute(schema.CreateTable(table))
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 1109, in execute
    return Connection.executors[c](self, object, multiparams, params)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 1156, in _execute_ddl
    compiled_ddl=ddl.compile(dialect=self.dialect),
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\expression.py",
 line 1257, in compile
    compiler.compile()
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 678, in compile
    self.string = self.process(self.statement)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 691, in process
    return obj._compiler_dispatch(self, **kwargs)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\visitors.py",
 line 48, in _compiler_dispatch
    return getter(visitor)(self, **kw)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\compiler.py",
 line 1136, in visit_create_table
    first_pk=column.primary_key and not first_pk
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\dialects\sqlite\base.py",
 line 234, in get_column_specification
    colspec = self.preparer.format_column(column) + " " + 
self.dialect.type_compiler.process(column.type)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\engine\base.py",
 line 734, in process
    return type_._compiler_dispatch(self)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\visitors.py",
 line 48, in _compiler_dispatch
    return getter(visitor)(self, **kw)
  File 
"c:\python25\lib\site-packages\sqlalchemy-0.6.0-py2.5.egg\sqlalchemy\sql\compiler.py",
 line 1442, in visit_null
    raise NotImplementedError("Can't generate DDL for the null type")
NotImplementedError: Can't generate DDL for the null type


Interestingly, there is no error as recently as SA 0.6beta3, but the error 
happens in 0.6.0.  Any thoughts?

Lance

--
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.

Reply via email to