Python_scripts/6_SQL/foreign_table.py
2025-09-18 16:54:02 +02:00

107 lines
2.6 KiB
Python

from pycen import con
url = 'https://wxs.ign.fr/agriculture/geoportail/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities'
layer = 'RPG.2020:parcelles_graphiques.title'
wpr_name = 'rpgwfs'
tab_name = 'rpg2020_parcellaire_graphique'
drop_fgn = 'DROP SERVER IF EXISTS %s CASCADE;'%wpr_name
fgn_data_wrapper = '''
CREATE SERVER IF NOT EXISTS %s
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (datasource 'WFS:%s', format 'WFS')
'''%(wpr_name,url)
table = '''
DROP FOREIGN TABLE IF EXISTS {table};
CREATE FOREIGN TABLE IF NOT EXISTS flux_geo.{table} (
id_parcel varchar,
surf_parcel float,
code_cultu varchar,
code_group varchar,
culture_d1 varchar,
culture_d2 varchar,
geom public.geometry(multipolygon, 4326)
)
SERVER {srv}
OPTIONS (layer '{layer}');
'''.format(table=tab_name,srv=wpr_name,layer=layer)
with con.begin() as cnx:
cnx.execute(drop_fgn)
with con.begin() as cnx:
cnx.execute(fgn_data_wrapper)
with con.begin() as cnx:
cnx.execute(table)
#######
#######
from pycen import con_anm as con
from sqlalchemy import text
db = 'bd_cen'
host = '91.134.194.221'
port = '5432'
srv_name = 'fdw_bd_cen'
tab_name = 'communes'
sch_name = 'territoire'
view_name = 'v_'+tab_name
mview_name = 'vm_'+tab_name
user = 'cen_admin'
pwd = '#CEN38@venir'
create_ext = 'CREATE EXTENSION IF NOT EXISTS postgres_fdw;'
drop_fgn = 'DROP SERVER IF EXISTS %s CASCADE;'%srv_name
fgn_data_wrapper = '''
CREATE SERVER IF NOT EXISTS %s
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname '%s', host '%s', port '%s')
'''%(srv_name,db,host,port)
fgn_user_wrapper = '''
CREATE USER MAPPING IF NOT EXISTS FOR %s
SERVER %s
OPTIONS (user '%s', password '%s');
'''%(user,srv_name,user,pwd)
table = '''
CREATE FOREIGN TABLE IF NOT EXISTS {sch_name}.{tab_name} (
code_insee varchar(5),
id varchar(24),
prec_plani float8,
nom varchar(45),
statut varchar(20),
canton varchar(45),
arrondisst varchar(45),
depart varchar(30),
region varchar(30),
popul int4,
multican varchar(3),
actif bool,
epfl varchar(10),
geom geometry(geometry,2154)
)
SERVER {fgn_server}
OPTIONS (schema_name 'administratif', table_name 'communes');
'''.format(
sch_name=sch_name, tab_name=tab_name, fgn_server=srv_name
)
vm = '''
CREATE MATERIALIZED VIEW {sch_name}.{mview_name} AS
SELECT * FROM {sch_name}.{tab_name};
GRANT SELECT ON {sch_name}.{mview_name} TO grp_consult;
GRANT SELECT ON {sch_name}.{mview_name} TO cen_user;
'''.format(sch_name=sch_name, mview_name=mview_name, tab_name=tab_name)
with con.begin() as cnx:
# cnx.execute(create_ext)
# cnx.execute(drop_fgn)
# cnx.execute(fgn_data_wrapper)
# cnx.execute(fgn_user_wrapper)
cnx.execute(text(table))
with con.begin() as cnx:
cnx.execute(text(vm))