Daha çox

Oracle məlumatlarını PyQGIS ilə oxumaq “identifikator uzun deyil” xətası verir


PyQGIS istifadə edərək Oracle məkan məlumatlarını QGIS-ə necə yüklədiyiniz barədə bir fikriniz varmı? Bu mümkündür? Çalışıram:

uri = QgsDataSourceURI () uri.setConnection ("* host *", "1521", "* database *", "* username *", "* password *") sql = "(SELECT fid, geom FROM target.ms_ft_bh095_v) "uri.setDataSource (" ", sql," GEOM "," "," fid ") layer = QgsVectorLayer (uri.uri ()," test "," oracle ")

Xəta mesajı belədir: ORA-00972: identifikator uzun deyil. Ancaq FID maksimum dəyəri cca 20 000-dir. Oracle sürücüsü bu sintaksislə doğrudurmu? Ms_ft_bh095_v bu anda baxılır.


Həqiqi səhv mesajı "ORA-00972: identifikator belədir çox long ". Bunun bir sütunun maksimum ölçüsü və ya dəyəri ilə heç bir əlaqəsi yoxdur, əksinə cədvəl adı və ya sütun adı kimi bir identifikatorun çox uzun olmasıdır (30 simvoldan çox).

Yəni istifadə etdiyiniz SEÇİM ifadəsində səhv bir şey görmürəm - istifadə etdiyiniz interfeys etibarsız hala gətirəcək bir şey əlavə etmədikcə. Və ya görünüş tərifiniz qəribə bir şey ehtiva edir. Və ya masa tərifiniz qəribə bir şeyə sahibdir.


Aşağıdakı kod mənim üçün işlədi.

# Xml.dom.minidom-dan idxal sistem modulları idxal sənəd sətri idxal os qsscore-dan idxal sys.core idxal qgis.gui-dən idxal * PyQt4.QtCore-dan idxal * PyQt4.QtGui-dən idxal QApplication PyQt4.QtXml-dən idxal * ctypes idxal * import cx_Oracle strProjetName = "C: /OSGeo4W/apache/htdocs/QGIS-Web-Client-master/projects/myworld.qgs" if os.path.isfile (strProjetName): os.remove (strProjetName) def add_LayersFrom : QGISAPP = QgsApplication (sys.argv, True) QgsApplication.setPrefixPath (r "C:  OSGeo4W  apps  qgis", True) QgsApplication.initQgis () # Oracle və Fetch Cədvəl Adlarına qoşun con = cx_Oracle.connect ('testinstance /[email protected]:1521/new ') print con.version cur = con.cursor () cur.execute (u "user_tab_columns-dən TABLE_NAME seçin, burada data_type =" SDO_GEOMETRY "") cədvəllər = cur.fetchall () QgsProject. instansiya (). setFileName (strProjetName) çap QgsProject.instance (). fileName () render = QgsMapRenderer () uri = QgsDataSourceURI () uri.setConnection ("189.60.67. 146 "," 1521 "," new "," testinstance "," testinstance ") render = QgsMapRenderer () cədvəllərdəki t üçün: çap str (t [0]) uri.setDataSource (", str (t [0]) , "GEOMETRY") uri.uri () vlayer = QgsVectorLayer (uri.uri (), str (t [0]), 'oracle') QgsMapLayerRegistry.instance (). AddMapLayer (vlayer) lst = [vlayer.id () ] render.setLayerSet (lst) rect = QgsRectangle (render.fullExtent ()) rect.scale (1.1) render.setExtent (rect) QgsProject.instance (). write () cur.close () con.close () QgsApplication. exitQgis () add_LayersFromDB ()


Videoya baxın: QGIS Python PyQGIS - Get raster layer statistics (Oktyabr 2021).