我只是写一个小网站,用flask和Geoalchemy2显示一些空间数据。现在我可以将一些新的空间记录(例如,点)插入到我的postgresql数据库中,但是当我想要更新它们时遇到一些麻烦。
我的代码如下。
Model.py:
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))
初始化的.py:
db = SQLAlchemy()
geo_engine = create_engine('postgresql://postgres:password@localhost/database', echo=True)
view.py:
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()
当我添加新的点记录时,我的代码会起作用。
当我编辑现有点时,我的更新部分代码返回打印结果(我只想知道如何编写它。):
(4L, Decimal('1508430387.581'), u'POINT(120.057, 30.262)')
看起来不像是一个类而是一个元组,所以我无法用
更新它Geopoint.geopt=.....
db.session.add(Geopoint)
db.session.commit()
在official document中只有将新对象添加到数据库中的示例,所以我真的很困惑。
是否有任何MAGIC句子更新数据或是否有其他地理orm库可供使用?
感谢任何答案。
答案 0 :(得分:0)
emmmmmm ......
最后我自己弄清楚了。
实际上改变很简单。我只是更改了查询对象,因此它向我返回了一个可以更新的Geopoint对象。
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()
改变这一点。
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()
然后我的更新代码可以写。
=。=