Как я могу использовать Geoalchemy2 для обновления пространственных данных (например, точки)?

Я просто пишу небольшой сайт, чтобы показать некоторые пространственные данные, используя колбу и 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()

В официальном документе есть только примеры добавления новых объектов в базу данных, поэтому я действительно растерялся.

Есть ли какое-нибудь предложение MAGIC для обновления данных или есть какие-то другие библиотеки географии или форм?

Благодарность за любой ответ.

1 ответ

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

Тогда мой код обновления можно написать.

=. =

Другие вопросы по тегам