2017-10-19 10 views
0

は、私はちょうどフラスコとGeoalchemy2を使用して、いくつかの空間データを表示するように小さなウェブサイトを作成します。今私はいくつかの新しい空間レコード(例えば、ポイント)を私のpostgresqlデータベースに挿入することができますが、私はそれらを更新したいときにいくつかの問題があります。Geoalchemy2を使用してポイント(点など)を更新するにはどうすればよいですか?

私のコードは以下の通りです。

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:[email protected]/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)') 

クラスが、そのタプルのように見えません私は本当に混乱していますので、データベースに新しいオブジェクトを追加するための唯一の例があるofficial document

Geopoint.geopt=..... 
db.session.add(Geopoint) 
db.session.commit() 

でそれを更新することはできません。

データを更新するための任意のMAGIC文はありますか使用するために、他の地理ORMライブラリはありますか?すべての答えを

感謝。

答えて

0

emmmmmm ......

最後に、私はそれを自分で見つけます。

は、実際に変更が非常に簡単です。私は更新することができる私にGeopointオブジェクトを返すようにクエリオブジェクトを変更するだけです。

geo_session_class = sessionmaker(バインド= 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() 

私の更新コードを書くことができます。

=。=

関連する問題