def reconnect(self, username=None, password=None): try: self.geodb = GeoDB(self.host, self.port, self.database, username or self.username, password or self.password) self.isValid = True except: self.isValid = False
def __init__(self, name, host, port, database, username, password): self.name = name self.host = host self.port = port self.database = database try: self.geodb = GeoDB(host, port, database, username, password) self.isValid = True self.username = username self.password = password except: self.isValid = False
def __init__(self, name, host, port, database, username, password): self.name = name self.host = host self.port = port self.database = database try: self.geodb = GeoDB(host, port, database, username, password) self.isValid = True except: self.isValid = False
class PgConnection(object): def __init__(self, name, host, port, database, username, password): self.name = name self.host = host self.port = port self.database = database try: self.geodb = GeoDB(host, port, database, username, password) self.isValid = True self.username = username self.password = password except: self.isValid = False def schemas(self): schemas = self.geodb.list_schemas() return [Schema(self, name) for oid, name, owner, perms in schemas] def reconnect(self, username=None, password=None): try: self.geodb = GeoDB(self.host, self.port, self.database, username or self.username, password or self.password) self.isValid = True except: self.isValid = False def importFileOrLayer(self, source, schema, tablename, overwrite, singleGeom=False): if overwrite: pk = "id" geom = "geom" providerName = "postgres" if isinstance(source, basestring): layerName = QtCore.QFileInfo(source).completeBaseName() else: layerName = source.name() if tablename is None: tablename = layerName uri = QgsDataSourceURI() uri.setConnection(self.geodb.host, str(self.geodb.port), self.geodb.dbname, self.geodb.user, self.geodb.passwd) uri.setDataSource(schema, tablename, geom, "", pk) options = {} options['overwrite'] = True if singleGeom: options['forceSinglePartGeometryType'] = True if isinstance(source, basestring): layer = QgsVectorLayer(source, layerName, "ogr") if not layer.isValid( ) or layer.type() != QgsMapLayer.VectorLayer: layer.deleteLater() raise WrongLayerFileError( "Error reading file {} or it is not a valid vector layer file" .format(source)) else: layer = source if not layer.isValid( ) or layer.type() != QgsMapLayer.VectorLayer: raise WrongLayerFileError( "Layer '%s' is not valid or is not a vector layer". format(layer.name())) ret, errMsg = QgsVectorLayerImport.importLayer( layer, uri.uri(), providerName, layer.crs(), False, False, options) if ret != 0: raise Exception(errMsg) else: if isinstance(source, QgsMapLayer): source = source.source() args = ["shp2pgsql", "-a"] if singleGeom: args.append("-S") args.extend([source, schema + "." + tablename]) if os.name == 'nt': cmdline = subprocess.list2cmdline(args) data = None p = os.popen3(cmdline) data = p[1].read() cursor = self.geodb.con.cursor() newcommand = re.compile(";$", re.MULTILINE) # split the commands cmds = newcommand.split(data) for cmd in cmds[:-1]: # run SQL commands within current DB connection self.geodb._exec_sql(cursor, cmd) data = cmds[-1] self.geodb.con.commit() if data is None or len(data) == 0: raise Exception("".join(p[2].readlines())) else: # start shp2pgsql as subprocess p = subprocess.Popen(args=args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # read the output while the process is running data = '' cursor = self.geodb.con.cursor() newcommand = re.compile(";$", re.MULTILINE) while p.poll() == None: data += p.stdout.read() # split the commands cmds = newcommand.split(data) for cmd in cmds[:-1]: # run SQL commands within current DB connection self.geodb._exec_sql(cursor, cmd) data = cmds[-1] # commit! self.db.con.commit() if p.returncode != 0: raise Exception(p.stderr.readlines().join("\n"))
class PgConnection(object): def __init__(self, name, host, port, database, username, password): self.name = name self.host = host self.port = port self.database = database try: self.geodb = GeoDB(host, port, database, username, password) self.isValid = True self.username = username self.password = password except: self.isValid = False def schemas(self): schemas = self.geodb.list_schemas() return [Schema(self, name) for oid, name, owner, perms in schemas] def reconnect(self, username = None, password = None): try: self.geodb = GeoDB(self.host, self.port, self.database, username or self.username, password or self.password) self.isValid = True except: self.isValid = False def importFileOrLayer(self, source, schema, tablename, overwrite, singleGeom = False): if overwrite: if isinstance(source, basestring): layerName = QtCore.QFileInfo(source).completeBaseName() else: layerName = source.name() if tablename is None: tablename = layerName if isinstance(source, basestring): layer = QgsVectorLayer(source, layerName, "ogr") if not layer.isValid() or layer.type() != QgsMapLayer.VectorLayer: layer.deleteLater() raise WrongLayerFileError("Error reading file {} or it is not a valid vector layer file".format(source)) else: layer = source if not layer.isValid() or layer.type() != QgsMapLayer.VectorLayer: raise WrongLayerFileError("Layer '%s' is not valid or is not a vector layer".format(layer.name())) extent = '{},{},{},{}'.format( layer.extent().xMinimum(), layer.extent().xMaximum(), layer.extent().yMinimum(), layer.extent().yMaximum()) geomtypes = {QGis.WKBPoint: 3, QGis.WKBLineString: 4, QGis.WKBPolygon: 5, QGis.WKBMultiPoint: 7, QGis.WKBMultiLineString: 9, QGis.WKBMultiPolygon: 8} geomtype = geomtypes.get(layer.wkbType(), 0) import processing from processing.algs.gdal.ogr2ogrtopostgis import Ogr2OgrToPostGis as ogr2ogr params = {ogr2ogr.INPUT_LAYER: layer, ogr2ogr.DBNAME: self.geodb.dbname, ogr2ogr.PORT : self.geodb.port, ogr2ogr.HOST : self.geodb.host, ogr2ogr.USER : self.geodb.user, ogr2ogr.PASSWORD: self.geodb.passwd, ogr2ogr.SCHEMA: schema, ogr2ogr.GTYPE: geomtype, ogr2ogr.TABLE: tablename, ogr2ogr.S_SRS: layer.crs().authid(), ogr2ogr.T_SRS: layer.crs().authid(), ogr2ogr.OVERWRITE: overwrite, ogr2ogr.APPEND: not overwrite, ogr2ogr.SPAT: extent } processing.runalg("gdalogr:importvectorintopostgisdatabasenewconnection", params)
def reconnect(self, username = None, password = None): try: self.geodb = GeoDB(self.host, self.port, self.database, username or self.username, password or self.password) self.isValid = True except: self.isValid = False
class PgConnection(object): def __init__(self, name, host, port, database, username, password): self.name = name self.host = host self.port = port self.database = database try: self.geodb = GeoDB(host, port, database, username, password) self.isValid = True except: self.isValid = False def schemas(self): schemas = self.geodb.list_schemas() return [Schema(self, name) for oid, name, owner, perms in schemas] def reconnect(self, username, password): try: self.geodb = GeoDB(self.host, self.port, self.database, username, password) self.isValid = True except: self.isValid = False def importFileOrLayer(self, source, schema, tablename, overwrite): if overwrite: pk = "id" geom = "geom" providerName = "postgres" if isinstance(source, basestring): layerName = QtCore.QFileInfo(source).completeBaseName() else: layerName = source.name() if tablename is None: tablename = layerName uri = QgsDataSourceURI() uri.setConnection(self.geodb.host, str(self.geodb.port), self.geodb.dbname, self.geodb.user, self.geodb.passwd) uri.setDataSource(schema, tablename, geom, "", pk) options = {} options['overwrite'] = True if isinstance(source, basestring): layer = QgsVectorLayer(source, layerName, "ogr") if not layer.isValid() or layer.type() != QgsMapLayer.VectorLayer: layer.deleteLater() raise WrongLayerFileError("Error reading file {} or it is not a valid vector layer file".format(source)) else: layer = source ret, errMsg = QgsVectorLayerImport.importLayer(layer, uri.uri(), providerName, layer.crs(), False, False, options) if ret != 0: raise Exception(errMsg) else: if isinstance(source, QgsMapLayer): source = source.source() args = ["shp2pgsql", "-a", source, schema + "." + tablename] if os.name == 'nt': cmdline = subprocess.list2cmdline(args) data = None p = os.popen3(cmdline) data = p[1].read() cursor = self.geodb.con.cursor() newcommand = re.compile(";$", re.MULTILINE) # split the commands cmds = newcommand.split(data) for cmd in cmds[:-1]: # run SQL commands within current DB connection self.geodb._exec_sql(cursor, cmd) data = cmds[-1] self.geodb.con.commit() if data is None or len(data) == 0: raise Exception("".join(p[2].readlines())) else: # start shp2pgsql as subprocess p = subprocess.Popen(args=args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # read the output while the process is running data = '' cursor = self.geodb.con.cursor() newcommand = re.compile(";$", re.MULTILINE) while p.poll() == None: data += p.stdout.read() # split the commands cmds = newcommand.split(data) for cmd in cmds[:-1]: # run SQL commands within current DB connection self.geodb._exec_sql(cursor, cmd) data = cmds[-1] # commit! self.db.con.commit() if p.returncode != 0: raise Exception(p.stderr.readlines().join("\n"))