首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明几何字段时的"Adapter不支持几何“异常

声明几何字段时的"Adapter不支持几何“异常
EN

Stack Overflow用户
提问于 2015-09-04 16:23:55
回答 1查看 139关注 0票数 0

在我的应用程序中,"Adapter不支持几何“异常将在尝试创建一个类型为”几何()“的字段时抛出。对于我的测试应用程序,我使用的是sqlite (生产将使用postgres):

代码语言:javascript
复制
db = DAL('sqlite://storage.sqlite', pool_size = 1, fake_migrate_all= False)

所讨论的DB表在模块内部的类中声明,并包含几个字段,其中一些字段包含位置数据:

代码语言:javascript
复制
from gluon.dal import Field, geoPoint, geoLine, geoPolygon

class Info(Base_Model):

    def __init__(...):

        try: 
            db.define_table('t_info', 
                ...
                Field('f_geolocation', type='geometry()', 
                    label =  current.T('Geolocation')),
                Field('f_city', type='string', 
                    label = current.T('City')),
                ...
        except Exception as e:
            ...

编辑:

根据Anthony的建议,我修改了DAL构造函数调用如下:

代码语言:javascript
复制
db = DAL('spatialite://storage.sqlite', pool_size = 1)

它产生以下错误消息:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\...\web2py\gluon\restricted.py", line 227, in restricted
    exec ccode in environment
  File "C:/My_Stuff/Programs/web2py/applications/Proj/models/db.py", line 38, in <module>
    db = DAL('spatialite://storage.sqlite', pool_size = 1) 
  File "C:\...\web2py\gluon\packages\dal\pydal\base.py", line 171, in __call__
    obj = super(MetaDAL, cls).__call__(*args, **kwargs)
  File "C:\...\web2py\gluon\packages\dal\pydal\base.py", line 457, in __init__
    raise RuntimeError("Failure to connect, tried %d times:\n%s" % (attempts, tb))
RuntimeError: Failure to connect, tried 5 times:
Traceback (most recent call last):
  File "C:\...\web2py\gluon\packages\dal\pydal\base.py", line 435, in __init__
    self._adapter = ADAPTERS[self._dbname](**kwargs)
  File "C:\...\web2py\gluon\packages\dal\pydal\adapters\base.py", line 53, in __call__
    obj = super(AdapterMeta, cls).__call__(*args, **kwargs)
  File "C:\...\web2py\gluon\packages\dal\pydal\adapters\sqlite.py", line 169, in __init__
    if do_connect: self.reconnect()
  File "C:\...\web2py\gluon\packages\dal\pydal\connection.py", line 129, in reconnect
    self.after_connection_hook()
  File "C:\...\web2py\gluon\packages\dal\pydal\connection.py", line 81, in after_connection_hook
    self.after_connection()
  File "C:\...\web2py\gluon\packages\dal\pydal\adapters\sqlite.py", line 177, in after_connection
    self.execute(r'SELECT load_extension("%s");' % libspatialite)
  File "C:\...\web2py\gluon\packages\dal\pydal\adapters\base.py", line 1326, in execute
    return self.log_execute(*a, **b)
  File "C:\...\web2py\gluon\packages\dal\pydal\adapters\base.py", line 1320, in log_execute
    ret = self.cursor.execute(command, *a[1:], **b)
OperationalError: The specified module could not be found.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-04 20:12:46

如果要在SQLite中使用几何图形字段,则必须使用spatialite适配器,该适配器使用SQLite的SpatialLite扩展:

代码语言:javascript
复制
db = DAL('spatialite://storage.sqlite', pool_size = 1)

注意,您必须安装了spatialite才能使其工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32402598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档