|
|
1
|
+# coding=utf-8
|
|
|
2
|
+#author: 4N
|
|
|
3
|
+#createtime: 2022/2/23
|
|
|
4
|
+#email: nheweijun@sina.com
|
|
|
5
|
+
|
|
|
6
|
+from sqlalchemy import create_engine
|
|
|
7
|
+from sqlalchemy.orm import sessionmaker,Session
|
|
|
8
|
+from osgeo import ogr
|
|
|
9
|
+from osgeo.ogr import *
|
|
|
10
|
+
|
|
|
11
|
+class Migration():
|
|
|
12
|
+
|
|
|
13
|
+ dmap_dms_ds = None
|
|
|
14
|
+ dmap_server_ds = None
|
|
|
15
|
+ dmap_manager_ds = None
|
|
|
16
|
+
|
|
|
17
|
+ def __init__(self,dmap_dms_db,dmap_server_db,dmap_manager_db):
|
|
|
18
|
+
|
|
|
19
|
+ self.dmap_dms_ds : DataSource = self.open_pg_data_source(dmap_dms_db)
|
|
|
20
|
+ self.dmap_server_ds: DataSource = self.open_pg_data_source(dmap_server_db)
|
|
|
21
|
+ self.dmap_manager_ds: DataSource = self.open_pg_data_source(dmap_manager_db)
|
|
|
22
|
+
|
|
|
23
|
+
|
|
|
24
|
+
|
|
|
25
|
+ def process(self):
|
|
|
26
|
+ self.dmap_dms_migration()
|
|
|
27
|
+ self.dmap_server_migration()
|
|
|
28
|
+
|
|
|
29
|
+
|
|
|
30
|
+
|
|
|
31
|
+ def dmap_dms_migration(self):
|
|
|
32
|
+
|
|
|
33
|
+ database:Layer = self.dmap_dms_ds.ExecuteSQL('select * from "dmdms_database" ')
|
|
|
34
|
+
|
|
|
35
|
+
|
|
|
36
|
+ self.dmap_manager_ds.CopyLayer(database,"dmap_database",["OVERWRITE=YES"])
|
|
|
37
|
+
|
|
|
38
|
+
|
|
|
39
|
+
|
|
|
40
|
+
|
|
|
41
|
+ def dmap_server_migration(self):
|
|
|
42
|
+
|
|
|
43
|
+ pass
|
|
|
44
|
+
|
|
|
45
|
+
|
|
|
46
|
+ def end(self):
|
|
|
47
|
+
|
|
|
48
|
+ if self.dmap_dms_ds:
|
|
|
49
|
+ self.dmap_dms_ds.Destroy()
|
|
|
50
|
+ if self.dmap_server_ds:
|
|
|
51
|
+ self.dmap_server_ds.Destroy()
|
|
|
52
|
+ if self.dmap_manager_ds:
|
|
|
53
|
+ self.dmap_manager_ds.Destroy()
|
|
|
54
|
+
|
|
|
55
|
+
|
|
|
56
|
+ def open_pg_data_source(self,uri):
|
|
|
57
|
+ """
|
|
|
58
|
+ # 获取PostGIS数据源
|
|
|
59
|
+ :return:
|
|
|
60
|
+ """
|
|
|
61
|
+ db_conn_tuple = self.get_info_from_sqlachemy_uri(uri)
|
|
|
62
|
+ fn = "PG: user=%s password=%s host=%s port=%s dbname=%s " % db_conn_tuple
|
|
|
63
|
+ driver = ogr.GetDriverByName("PostgreSQL")
|
|
|
64
|
+ if driver is None:
|
|
|
65
|
+ raise Exception("打开PostgreSQL驱动失败,可能是当前GDAL未支持PostgreSQL驱动!")
|
|
|
66
|
+ ds = driver.Open(fn, 1)
|
|
|
67
|
+ if ds is None:
|
|
|
68
|
+ raise Exception("打开数据源失败!")
|
|
|
69
|
+ return ds
|
|
|
70
|
+
|
|
|
71
|
+ def get_info_from_sqlachemy_uri(self,uri):
|
|
|
72
|
+ parts = uri.split(":")
|
|
|
73
|
+ user = parts[1][2:]
|
|
|
74
|
+
|
|
|
75
|
+ password_list = parts[2].split("@")
|
|
|
76
|
+ if password_list.__len__() > 2:
|
|
|
77
|
+ password = "@".join(password_list[:-1])
|
|
|
78
|
+ else:
|
|
|
79
|
+ password = parts[2].split("@")[0]
|
|
|
80
|
+ host = parts[2].split("@")[-1]
|
|
|
81
|
+ port = parts[3].split("/")[0]
|
|
|
82
|
+ database = parts[3].split("/")[1]
|
|
|
83
|
+
|
|
|
84
|
+ return user, password, host, port, database
|
|
|
85
|
+
|
|
|
86
|
+if __name__ == '__main__':
|
|
|
87
|
+
|
|
|
88
|
+ dmap_dms_db = "postgresql://postgres:chinadci@172.26.60.100:5432/dmap_dms"
|
|
|
89
|
+ dmap_server_db = "postgresql://postgres:chinadci@172.26.60.100:5432/DmapServer"
|
|
|
90
|
+ dmap_manager_db = "postgresql://postgres:chinadci@172.26.60.100:5432/migration"
|
|
|
91
|
+
|
|
|
92
|
+ migration = Migration(dmap_dms_db,dmap_server_db,dmap_manager_db)
|
|
|
93
|
+ migration.process()
|
|
|
94
|
+ migration.end() |