full stack trace plz

Gregg Lind wrote:
>
> Alas, that doesn't seem to matter or help.
>
> Even this statement causes the same issue.  Odd.  Must not be related
> to the colons, alas.
>
> DDL(r''' ''', on="postgres").execute_at('after-create',Data.__table__)
>
>
>
> On Fri, May 29, 2009 at 3:08 PM, Michael Bayer <mike...@zzzcomputing.com>
> wrote:
>>
>> Gregg Lind wrote:
>>>
>>> I used the DDL style
>>>
>>> DDL('''ALTER TABLE data ADD CONSTRAINT lowername_check  CHECK
>>> (lowername !~ '[[\:upper\:]]')''',
>>>         on="postgres").execute_at('after-create',Data.__table__)
>>>
>>> and now my "print_schema" method (based on
>>> http://www.sqlalchemy.org/trac/wiki/FAQ#HowcanIgettheCREATETABLEDROPTABLEoutputasastring)
>>>  breaks (on PG only, because of the DDL), with this error:
>>>
>>> TypeError: unsupported operand type(s) for +: '_TextClause' and 'str'
>>>
>>> I escaped the colons in the DDL.   Workarounds?
>>
>> escape them with \\: or use r'\:'
>>
>>
>>>
>>> Gregg
>>>
>>>
>>> Code:
>>>
>>> def print_schema(T="postgres"):
>>>     ''' print print_schema will print the schema in use '''
>>>     global Base
>>>     from StringIO import StringIO
>>>     buf = StringIO()
>>>     print '%s://' % T
>>>     engine = create_engine('%s://' % T, strategy='mock',
>>> executor=lambda s, p='': buf.write(s + p))
>>>     Base.metadata.create_all(engine)
>>>     return buf.getvalue()
>>>
>>>
>>>
>>> On Fri, May 29, 2009 at 12:27 PM, Gregg Lind <gregg.l...@gmail.com>
>>> wrote:
>>>> As always, thank you for the complete, exhaustive answer.  This
>>>> particular thing is definitely and edge case, and rather non-obvious,
>>>> so thank you for walking me through it.
>>>>
>>>> Either of those are clean enough for me!
>>>>
>>>> Is there are more proper / general way to describe the problem, so
>>>> google and make this answer easier to find?
>>>>
>>>> Gregg
>>>>
>>>>
>>>>
>>>> On Fri, May 29, 2009 at 12:10 PM, Michael Bayer
>>>> <mike...@zzzcomputing.com> wrote:
>>>>>
>>>>> Gregg Lind wrote:
>>>>>>
>>>>>> I use declarative base for defining classes.
>>>>>>
>>>>>> I have a constraint that only works in Postgres.  How do I declare
>>>>>> that constraint "lowername_check" only if the session is going
>>>>>> postgres (and not to sqlite, for example).
>>>>>>
>>>>>> pg_only_constraint = CheckConstraint("lowername !~
>>>>>> '[[:upper:]]'",name='lowername_check'),
>>>>>> class Data(Base):
>>>>>>     __tablename__ = 'Data'
>>>>>>     lowername=Column(Unicode, nullable=False)
>>>>>>     __table_args__ = (
>>>>>>         pg_only_constraint,  {}
>>>>>>         )
>>>>>
>>>>>
>>>>>
>>>>> The cleanest way is to use the schema.DDL() construct which can
>>>>> filter
>>>>> against various backends, but requires that you spell out the
>>>>> constraint
>>>>> explicitly:
>>>>>
>>>>> DDL("CREATE CONSTRAINT ....",
>>>>> on="postgres").execute_at('after-create',
>>>>> Data.__table__)
>>>>>
>>>>> Alternatively, if you want to stick with the CheckConstraint object
>>>>> you
>>>>> can create a function "create_pg_constraints()" which is called at
>>>>> the
>>>>> point your app calls "create_engine()", that contains all PG specific
>>>>> constructs - the function would be called based on
>>>>> engine.dialect.name
>>>>> ==
>>>>> "postgres".
>>>>>
>>>>> We have a more flexible architecture in 0.6 for this sort of thing
>>>>> and
>>>>> I
>>>>> think if we add an AddConstraint() construct there and also move most
>>>>> of
>>>>> DDL()'s execute-at and "on" functionality into the base DDLElement
>>>>> class,
>>>>> that would enable both constructs to be combined together as in
>>>>> AddConstraint(CheckConstraint(...args...),
>>>>> on="postgres")).execute_at('after-create', Data.__table__).
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>> Gregg Lind
>>>>>>
>>>>>> >
>>>>>>
>>>>>
>>>>>
>>>>> >>
>>>>>
>>>>
>>>
>>> >
>>>
>>
>>
>> >
>>
>
> >
>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@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