Страница 1 из 1

Кнопка запускающая алгоритм

Добавлено: 26 апр 2019, 21:06
Svility
Есть БД на PG, через менеджер бд в qgis выполняются запросы типа:

Код: Выделить всё

UPDATE "Public".buildings
SET fields1=CASE
	WHEN ST_AREA(geom::geography)>500 THEN 1
	WHEN ST_AREA(geom::geography)<500 THEN 0
END 
так как подобный запрос выполняется очень часто, возникла необходимость оформить его в виде кнопки (плагина) в qgis. Через Plugin Builder кнопку создать не проблема, но как ее заставить выполнять алгоритм, не через sql в бд, а через таблицу слоёв - мне пока не ясно. Я с Python не дружу, но полагаю что он не должен быть сложнее sql :?
Прошу помочь советом/примером.

Re: Кнопка запускающая алгоритм

Добавлено: 27 апр 2019, 00:41
oldbay
А если ваш sql запрос выполнить таки из python при помощи psycopg2 ?

Код: Выделить всё

import psycopg2

connString = "
        host='hostname' 
        port='5432'
        dbname='db_name'
        user='db_user'
        password='db_user_pass'"

SQL="""
UPDATE \"Public\".buildings
SET fields1=CASE
	WHEN ST_AREA(geom::geography)>500 THEN 1
	WHEN ST_AREA(geom::geography)<500 THEN 0
""" 
   
conn = psycopg2.connect(connString)
cur = conn.cursor()
cur.execute(SQL)
cur.commit()
cur.close()
conn.close()

Re: Кнопка запускающая алгоритм

Добавлено: 27 апр 2019, 08:23
Svility
oldbay писал(а):
27 апр 2019, 00:41
Я правильно понимаю что такой запрос должен срабатывать через "Консоль Python" в QGIS ?

Re: Кнопка запускающая алгоритм

Добавлено: 27 апр 2019, 15:57
nikost
А штатный калькулятор не?
IF ($area > 500, 1, 0)

Re: Кнопка запускающая алгоритм

Добавлено: 28 апр 2019, 08:16
Svility
nikost писал(а):
27 апр 2019, 15:57
А штатный калькулятор не?
IF ($area > 500, 1, 0)
Вышеописанных строк тысячи, а штатный калькулятор имеет ограничения. Поэтому не подходит

Re: Кнопка запускающая алгоритм

Добавлено: 28 апр 2019, 22:40
oldbay
Svility писал(а):
27 апр 2019, 08:23
Я правильно понимаю что такой запрос должен срабатывать через "Консоль Python" в QGIS ?
Вот не скажу. Это простейший скрипт на python для выполнения вашего запроса. Он требует установки пакета psycopg2 (https://pypi.org/project/psycopg2/)