import pymysql
import geopandas
def create_insert_value(gdf,attr_name,geometry_column_name):
value=[]
for i in range(len(gdf)):
list=[]
for j in range(len(attr_name)):
if attr_name[j]==geometry_column_name:
list.append(str(gdf[attr_name[j]][i].wkt))
else:
list.append(str(gdf[attr_name[j]][i]))
value.append(tuple(list))
return value
def insert_table(table_name,attr_name,geometry_column_name,srid):
string1=[]
string2=[]
for i in range(len(attr_name)):
string1+=attr_name[i]+","
if attr_name[i]==geometry_column_name:
string2+="ST_GeomFromText(%s,{}),".format(srid)
else:
string2+="%s,"
string1[-1]=""
string2[-1]=""
s1="".join(string1)
s2="".join(string2)
insert_sql="insert into {}({}) values({});".format(table_name,s1,s2)
return insert_sql
def create_table(attr_name,attr_type,attr_other,table_name):
string=[]
for i in range(len(attr_name)):
string+=attr_name[i]+" "+attr_type[i]+" "+attr_other[i]+",\n"
string[-2]=""
s="".join(string)
create_table_sql="create table if not exists {}(\n{});".format(table_name,s)
return create_table_sql
def gdf2mysql(host,user,passwd,port,gdf,attr_name,attr_type,attr_other,table_name,db_name,srid,geometry_column_name):
create_table_sql=create_table(attr_name,attr_type,attr_other,table_name)
insert_table_sql=insert_table(table_name,attr_name,geometry_column_name,srid)
values=create_insert_value(gdf,attr_name,geometry_column_name)
con = pymysql.connect(host=host, user=user,passwd=passwd,port=port,charset='UTF8')
cur = con.cursor()
cur.execute("drop database if exists {};".format(db_name))
cur.execute("create database if not exists {};".format(db_name))
cur.execute("use {};".format(db_name))
#cur.execute("drop table if exists {};".format(table_name))
cur.execute(create_table_sql)
cur.executemany(insert_table_sql,values)
con.commit()
cur.close()
con.close()
def set_default_value(gdf,value,attr):
gdf.loc[gdf[attr]