Страница 1 из 1
как получить sequence.nextval из postgis из pyqgis
Добавлено: 13 окт 2014, 13:37
Филиппов Владислав
Здравствуйте.
как можно получить sequence.nextval из базы данных postgis из кода pyqgis (консоль QGIS)?
у меня есть слой из БД и шейп-файл. я хочу добавить объекты из шейпа в слой из БД, всё работает, но проблема в том как добавить значения в поле ID слоя из базы, которое PRIMARY KEY и берётся из известного сиквенса.

- Снимок.PNG (59.27 КБ) 4629 просмотров
Re: как получить sequence.nextval из postgis из pyqgis
Добавлено: 13 окт 2014, 15:19
Denis Rykov
А разве поле ID не заполнится автоматом, если не указывать значение явно?
[ Сообщение с мобильного устройства ]
Re: как получить sequence.nextval из postgis из pyqgis
Добавлено: 13 окт 2014, 16:51
Филиппов Владислав
а как?
я пока не силён в Python
Re: как получить sequence.nextval из postgis из pyqgis
Добавлено: 13 окт 2014, 17:46
Дмитрий Барышников
Удалите из кода присваивание полю id значения. Должно помочь.
[ Сообщение с мобильного устройства ]
Re: как получить sequence.nextval из postgis из pyqgis
Добавлено: 14 окт 2014, 06:15
Филиппов Владислав
атрибуты это список и используется так - createFeature.setAttributes(cfeature_Attributes)
так в БД:
[batr0(тот самый автоинкрементный ID), batr1, batr2, batr3]
а так в шейпе:
[satr0, satr1, satr2]
и нужно чтобы было:
batr0 = ??? (None Или "" это значения и в БД появляются соответственно NULL или пустая строка)
batr1 = satr0
batr2 = satr1
batr3 = satr2
т.е. сдвиг на единицу.
внешне атрибуты выглядят так

- Снимок.PNG (58.52 КБ) 4535 просмотров
собственно один из вариантов моего кода:
Код: Выделить всё
createFeature = QgsFeature()
createFeature.setGeometry(NewObj.geometry())
cfeature_Attributes=[]
cfeature_Attributes.append("") #в append обязательно нужно передавать аргумент
for index, atr in enumerate(NewObj.attributes()):
cfeature_Attributes.append(atr)
#del cfeature_Attributes[0]
for a in cfeature_Attributes:
print a
createFeature.setAttributes(cfeature_Attributes)
Re: как получить sequence.nextval из postgis из pyqgis
Добавлено: 14 окт 2014, 10:24
Филиппов Владислав
всем спасибо за участие. я победил.
Код: Выделить всё
newdata = iface.mapCanvas().layer(0)
existdata = iface.mapCanvas().layer(1)
objs = newdata.getFeatures()
idxNew = newdata.fieldNameIndex('Cadnumber')
idxEx = existdata.fieldNameIndex('Cadnumber')
fields = existdata.pendingFields()
for NewObj in objs:
if (existdata.isEditable() == False):
break
isfind = False
new_data_count += 1
features = existdata.getFeatures(QgsFeatureRequest().setFilterExpression ( u"Cadnumber= '" + NewObj.attributes()[idxNew] + "'") )
for f in features:
isfind = True
createFeature = QgsFeature()
createFeature.setFields(fields, True)
createFeature.setGeometry(NewObj.geometry())
for index, atr in enumerate(NewObj.attributes()):
createFeature.setAttribute(index+1, atr)
====================================================