当前位置: 首页 > news >正文

未来的门户网站辽宁大连网站建设

未来的门户网站,辽宁大连网站建设,移动端布局,匀贵网站建设Python操作MySQL数据库详细案例一、前言二、数据准备三、建立数据库四、处理和上传数据五、下载数据六、完整项目数据和代码一、前言 本文通过案例讲解如何使用Python操作MySQL数据库。具体任务为#xff1a;假设你已经了解MySQL和知识图谱标注工具Brat#xff0c;将Brat标注… Python操作MySQL数据库详细案例一、前言二、数据准备三、建立数据库四、处理和上传数据五、下载数据六、完整项目数据和代码一、前言 本文通过案例讲解如何使用Python操作MySQL数据库。具体任务为假设你已经了解MySQL和知识图谱标注工具Brat将Brat标注的结果上传到MySQL。 在知识图谱的文本标注任务中需要将数据按照事先决定的标注规则进行人工标注。Brat是一种比较著名的标注工具但是目前不支持Windows系统你可以安装虚拟机使用该工具。本文已经完成了一项基于Windows、Python3.7的标注软件制作工作你可以点击 实体关系文本标注工具 进行查看。 二、数据准备 本文从知网下载了一些关于医学文章的摘要提前设置了标注规则例如实体类别、关系等。通过Brat工具标注该文本数据并得到输出标注好的结果文件该文件共有2042行以T开头表示实体以R开头表示关系该文件是对网络图结构的文本表述。 三、建立数据库 在开始Python代码任务之前你需要对数据库有基础的了解比如你已经具备使用SQL语言操作MySQL数据库的能力。 1、将MySQL中的操作定义为python函数基于MySQL80那么就可以直接调用该函数来操作数据库。 import pandas as pd import pymysqlprint(1)def mycursor(db_name mysql80):connection pymysql.connect(hostlocalhost,userroot,port 3308,password,#123456database db_name,charsetutf8mb4,cursorclasspymysql.cursors.DictCursor)cursor connection.cursor()return cursor, connectiondef use(db_name):切换数据库返回游标return mycursor(db_name)def create_database(db_name):新建数据库sql fcreate database if not exists {db_name};cursor.execute(sql)def create_table(tbl_name):新建数据表sql fcreate table if not exists {tbl_name};cursor.execute(sql) def drop_database(db_name):删除数据库sql fdrop database if exists {db_name};cursor.execute(sql)def drop_table(tbl_name):删除数据表sql fdrop table if exists {tbl_name};cursor.execute(sql)def query(sql):以数据框形式返回查询据结果cursor.execute(sql)data cursor.fetchall() # 以元组形式返回查询数据header [t[0] for t in cursor.description]df pd.DataFrame(list(data), columnsheader) # pd.DataFrem 对列表具有更好的兼容性# return dfprint(df)def show_databases():查看服务器上的所有数据库sql show databases;return query(sql)def select_database():查看当前数据库sql select database();return query(sql)def show_tables():查看当前数据库中所有的表sql show tables;return query(sql)2、创建数据库 #选择需要使用的数据库此前需要创建数据库cursor, db use(mysql) #默认设置不要更改dbname kgg #此处更改为需要创建的数据库名 create_database(dbname) cursor, db use(dbname)3、建立数据库中各表 # 建实体类表 sqltb1 create table entity(id int auto_increment primary key comment 实体类编号,name varchar(20) comment 实体类名 ) comment 实体类表;cursor.execute(sqltb1)# 插入数据 sqlin1 insert into entity values (1, 病症),(2, 病名),(3, 诊断方案),(4, 治疗方案),(5, 药名),(6, 其它);cursor.execute(sqlin1) db.commit() #事务 # 检查是否传递成功 sqlset select * from entity ; query(sqlset)#-------------------------------------------------------------------------# 创建关系表格 sqltb2 create table relation(id int auto_increment primary key comment 关系编号,name varchar(20) comment 关系名 ) comment 关系表;cursor.execute(sqltb2)#插入数据 sqlin2 insert into relation values (1, 包含),(2, 治疗),(3, 危险因素),(4, 辅助诊断),(5, 特征),(6, 并发),(7, 别名),(8, 作用),(9, 条件);cursor.execute(sqlin2) db.commit() #事务 #检查是否传递成功 sqlset select * from relation ; query(sqlset)#-------------------------------------------------------------------------# 创建实体表 sqltb3 create table entitymin(id int auto_increment primary key comment 编号,name varchar(50) comment 实体名 ) comment 实体表;cursor.execute(sqltb3) db.commit() #事务#------------------------------------------------------------------------- 4、建立一些交叉表 #建立 实体-关系库并设置主键外键关联# 创建实体表 sqltb5 create table entityrela(id int auto_increment primary key comment 编号,headclass int comment 头实体类,headentity int comment 头实体,relation int comment 关系,tailentity int comment 尾实体,tailclass int comment 尾实体类 ) comment 实体和关系表;cursor.execute(sqltb5) db.commit() #事务#------------------------------------------------------------------------- #创建链接该表子表、外键与另外三张表父表、主键链接sqlkey alter table entityrela add constraint encl_he_en_id foreign key (headclass) references entity (id);cursor.execute(sqlkey)sqlkey alter table entityrela add constraint enla_he_enmin_id foreign key (headentity) references entitymin (id);cursor.execute(sqlkey)sqlkey alter table entityrela add constraint enla_re_re_id foreign key (relation) references relation (id);cursor.execute(sqlkey)sqlkey alter table entityrela add constraint enla_ta_enmin_id foreign key (tailentity) references entitymin (id);cursor.execute(sqlkey)sqlkey alter table entityrela add constraint enla_ta_en_id foreign key (tailclass) references entity (id);cursor.execute(sqlkey) db.commit() #事务#------------------------------------------------------------------------- 5、查看创建情况 # 查看该库中所有表格、查看表是否创建成功 show_tables()#------------------------------------------------------------------------- # end6、此外若你在任何操作过程中需要清空数据库你可以 # # #格式化数据库,取消下面三行注释运行后便清空数据库。 # drop_database(dbname) # create_database(dbname) # print(数据库格式化)四、处理和上传数据 创建好数据库后便可以对数据进行处理并将数据上传到数据库中。 1、同上连接数据库并定义工具函数。 # 将数据添加到数据库数据库已经提前建好import pandas as pd import pymysql import redef mycursor(db_name mysql80):connection pymysql.connect(hostlocalhost,userroot,password,#123456port 3308,database db_name,charsetutf8mb4,cursorclasspymysql.cursors.DictCursor)cursor connection.cursor()return cursor, connectiondef use(db_name):切换数据库返回游标return mycursor(db_name)def query(sql):以数据框形式返回查询据结果cursor.execute(sql)data cursor.fetchall() # 以元组形式返回查询数据header [t[0] for t in cursor.description]df pd.DataFrame(list(data), columnsheader) # pd.DataFrem 对列表具有更好的兼容性return df# print(df)def show_databases():查看服务器上的所有数据库sql show databases;return query(sql)def select_database():查看当前数据库sql select database();return query(sql)def show_tables():查看当前数据库中所有的表sql show tables;return query(sql)cursor, db use(mysql) #默认设置不要更改 dbname kgg cursor, db use(dbname)#------------------------------------- 2、数据处理-实体 # 将ann文件数据传入暂以txt格式传入 txtfile open(rC:\Users\DELL\Desktop\mysql数据库\0001-0500.ann, r, encodingutf-8).readlines() # print(txtfile[:3])#将实体与关系数据分开 entity [] relation [] for i in txtfile:if i[0] T:entity.append(i)else:relation.append(i)# print(relation)#将实体名称、类别与编号提取出来 entity [i.strip(\n).split(\t) for i in entity] entity [[i[0],i[1].split( )[0], i[-1]] for i in entity] # print(entity[:5])3、上传实体表中数据 #------------------------------------------------------------------------- #在实体表中插入数据 # #提取实体名去重;需要提前查看数据库已有的实体名称 需要表名称 entitymin [i[-1] for i in entity] entitymin list(set(entitymin)) # print(entitymin[:5])for q in entitymin:sqlq select name from entitymin where name (%s);TF cursor.execute(sqlq, q)if TF 0: #存在则为1不存在为0;不存在则添加 sqlin2 insert into entitymin values (null, %s) ;cursor.execute(sqlin2, q) db.commit() #事务 # 查看数据效果 sqlq select * from entitymin; query(sqlq) 4、数据处理-5元组关系 )#------------------------------------------------------------------------- #将三元组提取出来 relation [re.split([\tA: ],i) for i in relation] relation [[i[1],i[4],i[7]] for i in relation] # print(relation[:5])dicen dict([(病症,1),(病名,2),(诊断方案,3),(治疗方案,4),(药名,5),(其它,6)]) dicre dict([(包含,1),(治疗,2),(危险因素,3),(辅助诊断,4),(特征,5),(并发,6),(别名,7),(作用,8),(条件,9)]) # print(dicre[包含])# #将三元组中的实体编号替换成实体名称 for r in relation:r[0] dicre[r[0]]for e in entity:if r[1] e[0]:r[1] e[-1]r.insert(0,e[1])if r[-1] e[0]:r[-1] e[-1]r.append(e[1]) # print(relation[:5])#编码化---[头实体类, 头实体,关系类,尾实体, 尾实体类] enre [] for j in relation:j[0] dicen[j[0]]j[-1] dicen[j[-1]]sqlchaen select id from entitymin where name (%s);cursor.execute(sqlchaen, j[2])j[2] cursor.fetchone()[id]sqlchaen select id from entitymin where name (%s);cursor.execute(sqlchaen, j[3])j[3] cursor.fetchone()[id]enre.append([j[0],j[2],j[1],j[3],j[4]]) print(enre[-5:]) #传入实体-关系库5、上传5元组数据 #插入实体-关系库数据并创建链接该表子表、外键与另外三张表父表、主键链接# #插入数据 for en in enre:sqlin2 insert into entityrela values (null, %s, %s, %s, %s, %s) ;cursor.execute(sqlin2, (en[0],en[1],en[2],en[3],en[4])) db.commit() #事务 print(ok)#------------------------------------------------------------------------- #清除重复数据并id排序 sql delete p1 from entityrela p1,entityrela p2 where (p1.headclass p2.headclassand p1.headentity p2.headentityand p1.relation p2.relationand p1.tailentity p2.tailentityand p1.tailclass p2.tailclassand p1.id p2.id);cursor.execute(sql)sql ALTER TABLE entityrela DROP id;cursor.execute(sql) sql ALTER TABLE entityrela ADD id MEDIUMINT( 8 ) NOT NULL FIRST;cursor.execute(sql) sql ALTER TABLE entityrela MODIFY COLUMN id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);cursor.execute(sql) db.commit() #事务 cursor.close() #------------------------------------------------------------------------- #end 其中db.commit() 表示该事务要么全部成功要么全部不执行。cursor.close()表示关闭数据库。 6、在MySQL中查看执行结果 1在MySQL中查看所有数据库 2使用本文创建的kgg数据库并查看库内所有表 3检索任意表查看数据   以上3步表示数据库创建成功并成功写入数据。 五、下载数据 假设我们已经创建好数据库以及上传了数据。很久以后我们需要从数据库中下载数据进行分析或者分享给他人那么本文在这里考虑了这一情况。 1、连接数据库定义工具函数 # 从数据库中调取数据以中文显示import pandas as pd import pymysqldef mycursor(db_name mysql80):connection pymysql.connect(hostlocalhost,userroot,password, #123456port 3308,database db_name,charsetutf8mb4,cursorclasspymysql.cursors.DictCursor)cursor connection.cursor()return cursor, connectiondef use(db_name):切换数据库返回游标return mycursor(db_name)def query(sql):以数据框形式返回查询据结果cursor.execute(sql)data cursor.fetchall() # 以元组形式返回查询数据header [t[0] for t in cursor.description]df pd.DataFrame(list(data), columnsheader) # pd.DataFrem 对列表具有更好的兼容性return df# print(df)def show_databases():查看服务器上的所有数据库sql show databases;return query(sql)def select_database():查看当前数据库sql select database();return query(sql)def show_tables():查看当前数据库中所有的表sql show tables;return query(sql) dbname mysql cursor, db use(dbname) dbname kgg cursor, db use(dbname)# print(show_tables())2、选择数据并设计输出结构 #a.headentity , sql select m.name from entityrela a left outer join entitymin m on a.headentity m.id i_s list(query(sql)[name])sql select m.name from entityrela a left outer join entitymin m on a.tailentity m.id j_s list(query(sql)[name])sql select m.name from entityrela a left outer join relation m on a.relation m.id k_s list(query(sql)[name])eql select m.name from entityrela a left outer join entity m on a.headclass m.id ek_1 list(query(eql)[name])eq2 select m.name from entityrela a left outer join entity m on a.tailclass m.id ek_2 list(query(eq2)[name])result [[i,j,k,w,p] for i,j,k,w,p in zip(i_s,ek_1,k_s,ek_2,j_s)] print(result[:5]) cursor.close()3、设置保存文件地址并下载 f open(rC:\Users\DELL\Desktop\neo4j_python\data\4.csv,w, encodingutf-8) for i in result:f.write(\i[0]\,\i[1]\,\i[2]\,\i[3]\,\i[4]\\n) f.close() print(ok)六、完整项目数据和代码 以下任意方式皆可 1、评论、留言邮箱账号博主定期回复。 2、点击GitHub-python_mysql (或者访问 https://github.com/chenyiadam/python_mysql.git ) 进行下载
http://www.w-s-a.com/news/340933/

相关文章:

  • 购物网站建设课程设计报告做木工的网站
  • 扶沟县网站开发网站建设在哪里进行
  • 查看网站服务器信息网站首页地址 网站域名
  • 网站网站制作网站的ui界面设计案例分析
  • 怎么查网站是否备案成都装修公司联系电话
  • 佛山免费发布信息的网站oa办公系统排行榜
  • 南湖区建设街道办事处网站汕头建设银行各支行电话
  • 复古风格网站网站套餐方案
  • 界面设计做的好的网站旅游商城网站模板
  • 大型电子商务网站 服务器硬件 cpu 内存 硬盘 2014美食网站开发意义
  • 建立网站的目的和意义网站建设寻求
  • 邢台手机网站建设设计师培训心得
  • 营销网站怎么做丽水微信网站建设哪家好
  • 南昌定制网站开发多少钱东阿县城市建设局网站
  • 浙江网站建设公司南昌seo招聘
  • 工业软件有哪些专业seo站长工具全面查询网站
  • 山东兴华建设集团有限公司网站和京东一样做电子产品的网站
  • 网站建设谢辞关于h5的网站模板
  • 网站改版提交WordPress360收录
  • 省级网站 开发建设 资质在国外怎么做网站
  • 中商华兴建设有限公司网站我的世界查找建筑网站
  • 广东网站设计公司百度推广免费送网站
  • 高密做网站哪家好网站建设预算
  • 免费wordpress网站模板重庆如何做聚政网站
  • 人才网站app建设建议系统开发生命周期法的优点表现
  • 门户网站想要微信登录怎么做湖南网站seo推广
  • 襄阳 网站建设管理系统网站
  • 重庆工程建设招标投标交易信息网广州外贸seo优化
  • 一个一起做网站东莞设计兼职网站建设
  • 杭州网站程序开发公司在哪个公司建设网站好