2017-10-19 7 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)) 

초기화 평 :

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 문장이 있습니까? 또는 사용할 다른 지리학 라이브러리가 있습니까?

감사 응답.

답변

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() 

그러면 내 업데이트 코드를 쓸 수 있습니다.

=.