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