Except if I reflect the tables in existing db where constraints are
all named and then try:

from sqlalchemy.schema import DropConstraint
for table in metadata.tables.keys():
    for con in metadata.tables[table].constraints:
        if isinstance(con, PrimaryKeyConstraint):
            engine.execute(DropConstraint(con))

I get this exception again:
    engine.execute(DropConstraint(con))
  File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py",
line 1533, in execute
    return connection.execute(statement, *multiparams, **params)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py",
line 1086, in execute
    return Connection.executors[c](self, object, multiparams, params)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py",
line 1133, in _execute_ddl
    compiled_ddl=ddl.compile(dialect=self.dialect),
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/
expression.py", line 1257, in compile
    compiler.compile()
  File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py",
line 663, in compile
    self.string = self.process(self.statement)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py",
line 676, in process
    return obj._compiler_dispatch(self, **kwargs)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/visitors.py",
line 47, in _compiler_dispatch
    return getter(visitor)(self, **kw)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/compiler.py",
line 1209, in visit_drop_constraint
    self.preparer.format_constraint(drop.element),
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/compiler.py",
line 1550, in format_constraint
    return self.quote(constraint.name, constraint.quote)
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/compiler.py",
line 1524, in quote
    if self._requires_quotes(ident):
  File "/usr/lib/python2.5/site-packages/sqlalchemy/sql/compiler.py",
line 1505, in _requires_quotes
    lc_value = value.lower()
AttributeError: 'NoneType' object has no attribute 'lower'

It does not look like the reflection is applying the names on the
constraints.

-Gerry

On Apr 15, 12:42 pm, Gerry Reno <gr...@verizon.net> wrote:
> Yep.  Works with postgresql:
> $ python /tmp/testthis.py
> 2010-04-15 12:40:03,032 INFO sqlalchemy.engine.base.Engine.0x...240c
> select version()
> 2010-04-15 12:40:03,032 INFO sqlalchemy.engine.base.Engine.0x...240c
> {}
> 2010-04-15 12:40:03,053 INFO sqlalchemy.engine.base.Engine.0x...240c
> select current_schema()
> 2010-04-15 12:40:03,053 INFO sqlalchemy.engine.base.Engine.0x...240c
> {}
> 2010-04-15 12:40:03,119 INFO sqlalchemy.engine.base.Engine.0x...240c
> select relname from pg_class c join pg_namespace n on
> n.oid=c.relnamespace where n.nspname=current_schema() and
> lower(relname)=%(name)s
> 2010-04-15 12:40:03,119 INFO sqlalchemy.engine.base.Engine.0x...240c
> {'name': u'category'}
> 2010-04-15 12:40:03,211 INFO sqlalchemy.engine.base.Engine.0x...240c
> CREATE TABLE category (
>         name VARCHAR(64) NOT NULL,
>         CONSTRAINT name PRIMARY KEY (name)
> )
>
> 2010-04-15 12:40:03,211 INFO sqlalchemy.engine.base.Engine.0x...240c
> {}
> 2010-04-15 12:40:03,630 INFO sqlalchemy.engine.base.Engine.0x...240c
> COMMIT
> 2010-04-15 12:40:03,633 INFO sqlalchemy.engine.base.Engine.0x...240c
> ALTER TABLE category DROP CONSTRAINT name
> 2010-04-15 12:40:03,633 INFO sqlalchemy.engine.base.Engine.0x...240c
> {}
> 2010-04-15 12:40:03,676 INFO sqlalchemy.engine.base.Engine.0x...240c
> COMMIT
>
> -Gerry
>
> On Apr 15, 12:18 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>
>
>
> > On Apr 15, 2010, at 11:46 AM, Gerry Reno wrote:
>
> > > Upgraded to beta3.
>
> > > So you're saying that if we want to be able to drop a constraint later
> > > on we must create it with a name.
> > > Alright.  But I am still getting an Operational Error:
>
> > > ################################################
> > > #!/usr/bin/env python
>
> > > import sqlalchemy
> > > from sqlalchemy import Table, Column, MetaData
> > > from sqlalchemy.schema import *
> > > from sqlalchemy.types import *
>
> > > from sqlalchemy import create_engine
> > > engine = create_engine('sqlite:///:memory:', echo=True)
>
> > > metadata = MetaData()
>
> > > category = Table('category', metadata,
> > >    Column('name', String (64), nullable=False ),
> > >    PrimaryKeyConstraint('name', name='name'),
> > > )
>
> > > metadata.create_all(engine)
>
> > > from sqlalchemy.schema import DropConstraint
>
> > > engine.execute(DropConstraint(category.constraints.pop()))
>
> > >    cursor.execute(statement, parameters)
> > > sqlalchemy.exc.OperationalError: (OperationalError) near "DROP":
> > > syntax error u'ALTER TABLE category DROP CONSTRAINT name' ()
>
> > > What am I doing wrong here?
>
> > SQLite doesn't support ALTER TABLE.
>
> > > -Gerry
>
> > > On Apr 15, 12:28 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
> > >> don't know why you'd be using beta1 when we're up to beta3.....heres  a 
> > >> fully working example:
>
> > >> from sqlalchemy import *
> > >> from sqlalchemy.schema import *
>
> > >> metadata = MetaData()
>
> > >> c1 = Table('category', metadata,
> > >>    Column('name', String (64), nullable=False ),
> > >>    PrimaryKeyConstraint('name', name='somename')
> > >> )
>
> > >> c2 = Table('category2', metadata,
> > >>    Column('name', String (64), nullable=False ),
> > >>    Column('name2', String (64), nullable=False ),
> > >>    PrimaryKeyConstraint('name', 'name2', name='somename')
> > >> )
>
> > >> print DropConstraint(c1.constraints.pop())
> > >> print DropConstraint(c2.constraints.pop())
>
> > >> On Apr 14, 2010, at 9:40 PM, Gerry Reno wrote:
>
> > >>> Ok, I tried with the keyword but I get this using 0.6beta1:
>
> > >>>    PrimaryKeyConstraint(id='id'),
> > >>>  File "/usr/lib/python2.5/site-packages/sqlalchemy/schema.py", line
> > >>> 1391, in __init__
> > >>>    super(ColumnCollectionConstraint, self).__init__(**kw)
> > >>> TypeError: __init__() got an unexpected keyword argument 'id'
>
> > >>> -Gerry
>
> > >>> On Apr 14, 9:28 pm, Gerry Reno <gr...@verizon.net> wrote:
> > >>>> What do I do then for a composite primary key?
>
> > >>>> PrimaryKeyConstraint('col1','col2')
>
> > >>>> -Gerry
>
> > >>>> On Apr 14, 9:13 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>
> > >>>>> PrimaryKeyConstraint(name='name')
>
> > >>>>> On Apr 14, 2010, at 8:22 PM, Gerry Reno wrote:
>
> > >>>>>> category = Table('category', metadata,
> > >>>>>>    Column('name', String (64), nullable=False ),
> > >>>>>>    ...
> > >>>>>>    PrimaryKeyConstraint('name'),
> > >>>>>> )
>
> > >>> --
> > >>> 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 
> > >>> athttp://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 
> > > athttp://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.

Reply via email to