Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用schema.CreateTable生成SQL字符串失败,使用postgresql数组_Arrays_Postgresql_Sqlalchemy_Postgis - Fatal编程技术网

Arrays 使用schema.CreateTable生成SQL字符串失败,使用postgresql数组

Arrays 使用schema.CreateTable生成SQL字符串失败,使用postgresql数组,arrays,postgresql,sqlalchemy,postgis,Arrays,Postgresql,Sqlalchemy,Postgis,我想从包含postgresql数组的sqlalchemy类生成verbatim CREATE TABLE.sql字符串 在不使用数组列的情况下,以下操作可以正常工作: from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy import * from geoalchemy import * from sqlalchemy.ext.declarative import declarative_base metadata=M

我想从包含postgresql数组的sqlalchemy类生成verbatim CREATE TABLE.sql字符串

在不使用数组列的情况下,以下操作可以正常工作:

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数组列时失败:

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。不过,我不确定这是否可行,感谢avance。

可能有一个复杂的解决方案,涉及到挖掘sqlalchemy.方言。
不过你应该先用引擎试试。填写一个伪造的连接url,不要调用connect()。

可能有一个复杂的解决方案,需要挖掘sqlalchemy.dialogs。
不过你应该先用引擎试试。填写一个虚假的连接url,不要调用connect()。

尝试以这种方式添加引擎:
engine=create\u engine('postgresql://scott:tiger@localhost:5432/mydatabase');metadata=metadata(engine,schema='refineries')
结果与上述错误相同。也许我没有正确添加引擎?如果是这样的话,我很抱歉。我会使用bind=engine来明确表示,但你做得对。还是没有运气。回复同上。有人能推荐一个替代方案吗?尝试以这种方式添加引擎:
engine=create\u engine('postgresql://scott:tiger@localhost:5432/mydatabase');metadata=metadata(engine,schema='refineries')
结果与上述错误相同。也许我没有正确添加引擎?如果是这样的话,我很抱歉。我会使用bind=engine来明确表示,但你做得对。还是没有运气。回复同上。有人能提出一个替代方案吗?