1
我想从包含postgresql ARRAY的sqlalchemy类生成逐字CREATE TABLE .sql字符串。使用schema.CreateTable生成SQL字符串失败,并使用postgresql ARRAY
以下罚款作品,未经阵列列:
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy import *
from geoalchemy import *
from sqlalchemy.ext.declarative import declarative_base
metadata=MetaData(schema='refineries')
Base=declarative_base(metadata)
class woodUsers (Base):
__tablename__='gquery_wood'
id=Column('id', Integer, primary_key=True)
name=Column('name', String)
addr=Column('address', String)
jsn=Column('json', String)
geom=GeometryColumn('geom', Point(2))
这个炒菜就像我想它想:
In [1]: from sqlalchemy.schema import CreateTable
In [3]: tab=woodUsers()
In [4]: str(CreateTable(tab.metadata.tables['gquery_wood']))
Out[4]: '\nCREATE TABLE gquery_wood (\n\tid INTEGER NOT NULL, \n\tname VARCHAR, \n\taddress VARCHAR, \n\tjson VARCHAR, \n\tgeom POINT, \n\tPRIMARY KEY (id)\n)\n\n'
然而
当我添加一个PostgreSQL ARRAY列失败:
class woodUsers (Base):
__tablename__='gquery_wood'
id=Column('id', Integer, primary_key=True)
name=Column('name', String)
addr=Column('address', String)
types=Column('type', ARRAY(String))
jsn=Column('json', String)
geom=GeometryColumn('geom', Point(2))
与上面相同的命令导致一个长回溯字符串结束于:
/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.pyc in _compiler_dispatch(self, visitor, **kw)
70 getter = operator.attrgetter("visit_%s" % visit_name)
71 def _compiler_dispatch(self, visitor, **kw):
---> 72 return getter(visitor)(self, **kw)
73 else:
74 # The optimization opportunity is lost for this case because the
AttributeError: 'GenericTypeCompiler' object has no attribute 'visit_ARRAY'
如果完整的回溯是有用的,让我知道,我会后。
我认为这与指定编译器(?)的方言有关,但我不确定。我真的很希望能够生成SQL,而无需创建引擎。我不确定这是否可能,但感谢。
尝试以这种方式添加引擎:'engine = create_engine('postgresql:// scott:tiger @ localhost:5432/mydatabase'); metadata =元数据(引擎,模式='精炼厂')'结果是与上面相同的错误。也许我没有正确添加引擎?如果是的话,道歉。 – PeterT
我会用bind =引擎来明确,但是你做得正确。 – Tobu
仍然没有运气。与上述相同。任何人都可以提出替代方案 – PeterT