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.

Reply via email to