Re: [Sqlalchemy-tickets] [sqlalchemy] #2721: SQLAlchemy leaks the deferrable keyword in FKs for mys
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-05-08 01:23:00
|
#2721: SQLAlchemy leaks the deferrable keyword in FKs for mysql databases
---------------------------+----------------------------------
Reporter: kashif | Owner:
Type: defect | Status: new
Priority: medium | Milestone: 0.8.xx
Component: mysql | Severity: minor - half an hour
Resolution: | Keywords: mysql deferrable
Progress State: in queue |
---------------------------+----------------------------------
Changes (by zzzeek):
* priority: high => medium
Comment:
oh also here's a workaround for you, just override
visit_foreign_key_constraint, should work in 0.7 too:
{{{
from sqlalchemy.schema import ForeignKeyConstraint
from sqlalchemy.ext.compiler import compiles
@compiles(ForeignKeyConstraint, "mysql")
def visit_foreign_key_constraint(element, compiler, **kw):
deferrable = getattr(element, "deferrable", None)
if deferrable is True:
element.deferrable = None
text = compiler.visit_foreign_key_constraint(element, **kw)
if deferrable is True:
element.deferrable = True
return text
if __name__ == '__main__':
from sqlalchemy import MetaData, Column, Table, create_engine,
ForeignKey, Integer
m = MetaData()
t1 = Table('t1', m, Column('id', Integer, primary_key=True))
t2 = Table('t2', m, Column('id', Integer, ForeignKey('t2.id',
deferrable=True), primary_key=True))
e1 = create_engine("postgresql://scott:tiger@localhost/test",
echo=True)
e2 = create_engine("mysql://scott:tiger@localhost/test", echo=True)
m.create_all(e1)
m.create_all(e2)
m.drop_all(e1)
m.drop_all(e2)
}}}
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2721#comment:5>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|