首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Geoalchemy2更新空间数据(如点)?

如何使用Geoalchemy2更新空间数据(如点)?
EN

Stack Overflow用户
提问于 2017-10-19 17:50:59
回答 1查看 740关注 0票数 0

我只是写了一个小网站显示一些空间数据使用烧瓶和Geoalchemy2。现在,我可以将一些新的空间记录(例如,点数)插入到postgresql数据库中,但是当我想更新它们时会遇到一些问题。

我的代码如下。

Model.py:

代码语言:javascript
复制
class Geopoint(db.Model):
"""point class"""
    __tablename__ = 'geo_point'
    ptid = db.Column(db.Integer, primary_key=True)
    quiztime = db.Column(db.Numeric)
    geopt = db.Column(Geography(geometry_type='POINT', srid=4326))

init.py:

代码语言:javascript
复制
db = SQLAlchemy()
geo_engine = create_engine('postgresql://postgres:password@localhost/database', echo=True)

view.py:

代码语言:javascript
复制
geo_session_class = sessionmaker(bind=geo_engine)
geo_session = geo_session_class()

if request.method == 'POST':
    if geo_type == 'POINT':
        pt_res = geo_session.query(
            Geopoint.ptid,
            Geopoint.quiztime,
            Geopoint.geopt.ST_AsText()
        ).filter_by(ptid=geo_id).first()
        if pt_res:
            print pt_res
        else:
            geo_session.add(
                Geopoint(
                    quiztime=time.time(),
                    geopt=geo_type + '(' + geo_coord.encode('utf-8') + ')'
                )
            )
            geo_session.commit()

当我添加一个新的点记录时,我的代码可以工作。

当我编辑已存在的点时,我的更新部分代码返回打印的结果(我只想知道如何编写它):

代码语言:javascript
复制
(4L, Decimal('1508430387.581'), u'POINT(120.057, 30.262)')

这看起来不像一个类,而是一个元组,所以我不能用

代码语言:javascript
复制
Geopoint.geopt=.....
db.session.add(Geopoint)
db.session.commit()

正式文件中,只有示例可以将新对象添加到数据库中,所以我真的很困惑。

是否有任何神奇的句子来更新数据,或是否有其他地理或图书馆可以使用?

对任何答案都表示感谢。

EN

回答 1

Stack Overflow用户

发布于 2017-10-21 08:36:02

emmmmmm……

终于我自己想出来了。

其实改变是很简单的。我只需更改查询对象,以便它向我返回一个可以更新的Geopoint对象。

geo_session_class =会话制造者(bind=geo_engine) geo_session = geo_session_class()

代码语言:javascript
复制
if request.method == 'POST':
    if geo_type == 'POINT':
        pt_res = geo_session.query(
            Geopoint.ptid,
            Geopoint.quiztime,
            Geopoint.geopt.ST_AsText()
        ).filter_by(ptid=geo_id).first()
        if pt_res:
            print pt_res
        else:
            geo_session.add(
                Geopoint(
                    quiztime=time.time(),
                    geopt=geo_type + '(' + geo_coord.encode('utf-8') + ')'
                )
            )
            geo_session.commit()

换到这个。

代码语言:javascript
复制
if request.method == 'POST':
    if geo_type == 'POINT':
        pt_res = geo_session.query(Geopoint).filter_by(ptid=geo_id).first()
        if pt_res:
            print pt_res
        else:
            geo_session.add(
                Geopoint(
                    quiztime=time.time(),
                    geopt=geo_type + '(' + geo_coord.encode('utf-8') + ')'
                )
            )
            geo_session.commit()

那么我的更新代码就可以编写了。

=.=

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

https://stackoverflow.com/questions/46836009

复制
相关文章

相似问题

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