Ticket: http://www.sqlalchemy.org/trac/ticket/1769
On Apr 15, 3:57 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > On Apr 15, 2010, at 3:21 PM, Gerry Reno wrote: > > > 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)) > > > 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. > > maybe not for primary key constraints. Feel free to file a ticket in trac, > though I don't have any time to get to this myself right now. > > > > > > > -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 > > 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.