как получить sequence.nextval из postgis из pyqgis
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
как получить sequence.nextval из postgis из pyqgis
Здравствуйте.
как можно получить sequence.nextval из базы данных postgis из кода pyqgis (консоль QGIS)?
у меня есть слой из БД и шейп-файл. я хочу добавить объекты из шейпа в слой из БД, всё работает, но проблема в том как добавить значения в поле ID слоя из базы, которое PRIMARY KEY и берётся из известного сиквенса.
как можно получить sequence.nextval из базы данных postgis из кода pyqgis (консоль QGIS)?
у меня есть слой из БД и шейп-файл. я хочу добавить объекты из шейпа в слой из БД, всё работает, но проблема в том как добавить значения в поле ID слоя из базы, которое PRIMARY KEY и берётся из известного сиквенса.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: как получить sequence.nextval из postgis из pyqgis
А разве поле ID не заполнится автоматом, если не указывать значение явно?
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: как получить sequence.nextval из postgis из pyqgis
Удалите из кода присваивание полю id значения. Должно помочь.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
Re: как получить sequence.nextval из postgis из pyqgis
атрибуты это список и используется так - createFeature.setAttributes(cfeature_Attributes)
так в БД:
[batr0(тот самый автоинкрементный ID), batr1, batr2, batr3]
а так в шейпе:
[satr0, satr1, satr2]
и нужно чтобы было:
batr0 = ??? (None Или "" это значения и в БД появляются соответственно NULL или пустая строка)
batr1 = satr0
batr2 = satr1
batr3 = satr2
т.е. сдвиг на единицу.
внешне атрибуты выглядят так собственно один из вариантов моего кода:
так в БД:
[batr0(тот самый автоинкрементный ID), batr1, batr2, batr3]
а так в шейпе:
[satr0, satr1, satr2]
и нужно чтобы было:
batr0 = ??? (None Или "" это значения и в БД появляются соответственно NULL или пустая строка)
batr1 = satr0
batr2 = satr1
batr3 = satr2
т.е. сдвиг на единицу.
внешне атрибуты выглядят так собственно один из вариантов моего кода:
Код: Выделить всё
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)
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
Re: как получить sequence.nextval из postgis из pyqgis
всем спасибо за участие. я победил.
Код: Выделить всё
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)
====================================================
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 2 гостя