我只是写了一个小网站显示一些空间数据使用烧瓶和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))init.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()在正式文件中,只有示例可以将新对象添加到数据库中,所以我真的很困惑。
是否有任何神奇的句子来更新数据,或是否有其他地理或图书馆可以使用?
对任何答案都表示感谢。
发布于 2017-10-21 08:36:02
emmmmmm……
终于我自己想出来了。
其实改变是很简单的。我只需更改查询对象,以便它向我返回一个可以更新的Geopoint对象。
geo_session_class =会话制造者(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()那么我的更新代码就可以编写了。
=.=
https://stackoverflow.com/questions/46836009
复制相似问题