问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库系统原理(实践)是什么意思

发布网友 发布时间:2022-04-20 00:47

我来回答

2个回答

懂视网 时间:2022-05-03 00:28

 

 二、小练手

使用目前学的sqlite3数据库知识,对一些数据进行增删查改的操作。此处选择来自下面网站的数据

url = http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html 

先将数据从网站上爬取下来,存储为csv文件,然后再保存到数据库中,接着进行数据的操作。对于如何存储为csv文件,请查看 >>> 《此处的最后一个小主题》

对于本次小练习的介绍:

目的:对已爬取的数据进行数据库管理和简单操作

步骤: 创建数据库文件 >>> 创建表 >>> 保存数据到数据库 >>> 对数据进行简单操作

方法:我采用的方法是:

① 编写一个函数( get_data(fileName) ):读取csv文件中的数据,主要完成对数据的格式转换,以便适合保存到数据库中

② 编写一个函数类( class SQL_method ):对数据库进行简单操作,主要完成数据库的创建和数据的增删查改

对 SQL_method 类的方法说明
方法 说明
__init__(self, dbName, tabelName, data, columns, COLUMNS, Read_All=True) 对参数进行初始化,参数含义分别为:数据库名称、表格名称、数据、表格首行(用于创建表)、表格首行(用于格式输出)、输出所有数据(插入数据后)
creatTable(self) 创建数据库文件、创建表格
destroyTable(self) 删除表格
insertDatas(self) 向数据库的表格中插入多条数据
getAllData(self) 以列表形式返回数据库表格中的所有数据
searchData(self, condition, IfPrint=True) 查找特定数据, 参数的含义分别为:查找条件、是否输出(查找的数据)
deleteData(self, condition) 在数据库的表格中删除特定数据, 参数为删除条件
printData(self, data) 输出数据, 参数为需要输出的数据
run(self) 运行创建数据库和表格的函数,同时支持输出所有数据(依靠Read_All)

 

③ 尝试其他操作 ( 以下的所有操作均在 main 函数中实现 ):

a. 在数据库中查找某一项记录

b. 对数据按照某种排序输出

c. 对数据进行增加权值操作,实现重新排序 【权值详情】

d. 删除数据库中的某些记录

e. 删除数据库中的表

好了,有了前进的方向,那我们杨帆 ----- 起航 >>>

技术图片
 1 # -*- coding: utf-8 -*-
 2 ‘‘‘
 3 使用 url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html" 的数据进行SQLite3数据库的练习使用
 4 @author: bpf
 5 ‘‘‘
 6 
 7 import sqlite3
 8 from pandas import DataFrame
 9 import re
 10 
 11 class SQL_method:
 12 ‘‘‘
 13 function: 可以实现对数据库的基本操作
 14 ‘‘‘
 15 def __init__(self, dbName, tableName, data, columns, COLUMNS, Read_All=True):
 16  ‘‘‘
 17  function: 初始化参数
 18  dbName: 数据库文件名 
 19  tableName: 数据库中表的名称
 20  data: 从csv文件中读取且经过处理的数据
 21  columns: 用于创建数据库,为表的第一行
 22  COLUMNS: 用于数据的格式化输出,为输出的表头
 23  Read_All: 创建表之后是否读取出所有数据
 24  ‘‘‘
 25  self.dbName = dbName
 26  self.tableName = tableName
 27  self.data = data
 28  self.columns = columns
 29  self.COLUMNS = COLUMNS
 30  self.Read_All = Read_All
 31 
 32 def creatTable(self):
 33  ‘‘‘
 34  function: 创建数据库文件及相关的表
 35  ‘‘‘
 36  # 连接数据库
 37  connect = sqlite3.connect(self.dbName)
 38  # 创建表
 39  connect.execute("CREATE TABLE {}({})".format(self.tableName, self.columns))
 40  # 提交事务
 41  connect.commit()
 42  # 断开连接
 43  connect.close()
 44 
 45 def destroyTable(self):
 46  ‘‘‘
 47  function: 删除数据库文件中的表
 48  ‘‘‘
 49  # 连接数据库
 50  connect = sqlite3.connect(self.dbName)
 51  # 删除表
 52  connect.execute("DROP TABLE {}".format(self.tableName))
 53  # 提交事务
 54  connect.commit()
 55  # 断开连接
 56  connect.close()
 57 
 58 def insertDataS(self):
 59  ‘‘‘
 60  function: 向数据库文件中的表插入多条数据
 61  ‘‘‘
 62  # 连接数据库
 63  connect = sqlite3.connect(self.dbName)
 64  # 插入多条数据
 65  connect.executemany("INSERT INTO {} VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)".format(self.tableName), self.data)
 66  #for i in range(len(self.data)):
 67  # connect.execute("INSERT INTO university VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)", data[i])
 68  # 提交事务
 69  connect.commit()
 70  # 断开连接
 71  connect.close()
 72 
 73 def getAllData(self):
 74  ‘‘‘
 75  function: 得到数据库文件中的所有数据
 76  ‘‘‘
 77  # 连接数据库
 78  connect = sqlite3.connect(self.dbName)
 79  # 创建游标对象
 80  cursor = connect.cursor()
 81  # 读取数据
 82  cursor.execute("SELECT * FROM {}".format(self.tableName))
 83  dataList = cursor.fetchall()
 84  # 断开连接
 85  connect.close()
 86  return dataList
 87 
 88 def searchData(self, conditions, IfPrint=True):
 89  ‘‘‘
 90  function: 查找特定的数据
 91  ‘‘‘
 92  # 连接数据库
 93  connect = sqlite3.connect(self.dbName)
 94  # 创建游标
 95  cursor = connect.cursor()
 96  # 查找数据
 97  cursor.execute("SELECT * FROM {} WHERE {}".format(self.tableName, conditions))
 98  data = cursor.fetchall()
 99  # 关闭游标
100  cursor.close()
101  # 断开数据库连接
102  connect.close()
103  if IfPrint:
104  self.printData(data)
105  return data
106 
107 def deleteData(self, conditions):
108  ‘‘‘
109  function: 删除数据库中的数据
110  ‘‘‘
111  # 连接数据库
112  connect = sqlite3.connect(self.dbName)
113  # 插入多条数据
114  connect.execute("DELETE FROM {} WHERE {}".format(self.tableName, conditions))
115  # 提交事务
116  connect.commit()
117  # 断开连接
118  connect.close()
119 
120 def printData(self, data):
121  print("{1:{0}^3}{2:{0}<11}{3:{0}<4}{4:{0}<4}{5:{0}<5}{6:{0}<5}{7:{0}^5}{8:{0}^5}{9:{0}^5}{10:{0}^5}{11:{0}^5}{12:{0}^6}{13:{0}^5}".format(chr(12288), *self.COLUMNS))
122  for i in range(len(data)):
123  print("{1:{0}<4.0f}{2:{0}<10}{3:{0}<5}{4:{0}<6}{5:{0}<7}{6:{0}<8}{7:{0}<7.0f}{8:{0}<8}{9:{0}<7.0f}{10:{0}<6.0f}{11:{0}<9.0f}{12:{0}<6.0f}{13:{0}<6.0f}".format(chr(12288), *data[i]))
124 
125 def run(self):
126  try:
127  # 创建数据库文件
128  self.creatTable()
129  print(">>> 数据库创建成功!")
130  # 保存数据到数据库
131  self.insertDataS()
132  print(">>> 表创建、数据插入成功!")
133  except:
134  print(">>> 数据库已创建!")
135  # 读取所有数据
136  if self.Read_All:
137  self.printData(self.getAllData())
138 
139 def get_data(fileName):
140 ‘‘‘
141 function: 读取获得大学排名的数据 并 将结果返回
142 ‘‘‘
143 data = []
144 # 打开文件
145 f = open(fileName, ‘r‘, encoding=‘utf-8‘)
146 # 按行读取文件
147 for line in f.readlines():
148  # 替换掉其中的换行符和百分号 替换百分号是为了方便之后的排序和运算
149  line = line.replace(‘
‘, ‘‘)
150  line = line.replace(‘%‘,‘‘)
151  # 将字符串按照 ‘,‘ 分割为列表
152  line = line.split(‘,‘)
153  
154  for i in range(len(line)):
155  # 使用 异常处理 避开 出现中文无法转换 的错误
156  try:
157   # 将空值填充为 0
158   if line[i] == ‘‘:
159   line[i] = ‘0‘
160   # 将数字转换为数值
161   line[i] = eval(line[i])
162  except:
163   continue
164  data.append(tuple(line))
165 # EN_columns、CH_columns 分别为 用于数据库创建、数据的格式化输出
166 EN_columns = "Rank real, University text, Province text, Grade real, SourseQuality real, TrainingResult real, ResearchScale real, 167 ReserchQuality real, TopResult real, TopTalent real, TechnologyService real, Cooperation real, TransformationResults real"
168 CH_columns = ["排名", "学校名称", "省市", "总分", "生涯质量", "培养结果(%)", "科研规模", "科研质量", "顶尖成果", "顶尖人才", "科技服务", "产学研合作", "成果转化"]
169 return data[1:], EN_columns, CH_columns
170 
171 if __name__ == "__main__":
172 # =================== 设置和得到基本数据 ===================
173 fileName = "D:\University_Rank.csv"
174 data, EN_columns, CH_columns = get_data(fileName)
175 dbName = "university.db"
176 tableName = "university"
177 
178 # ================= 创建一个SQL_method对象 ==================
179 SQL = SQL_method(dbName, tableName, data, EN_columns, CH_columns, False)
180 
181 # =================== 创建数据库并保存数据 ===================
182 SQL.run()
183 
184 # =================== 在数据库中查找数据项 ===================
185 # 查找记录并输出结果
186 print(">>> 查找数据项(University = ‘广东工业大学‘) :")
187 SQL.searchData("University = ‘广东工业大学‘", True)
188 
189 # ================= 在数据库中筛选数据项并排序 ==================
190 # 将选取广东省的数据 并 对科研规模大小排序
191 print("
>>> 筛选数据项并按照科研规模排序(Province = ‘广东省‘) :")
192 SQL.searchData("Province = ‘广东省‘ ORDER BY ResearchScale", True)
193 
194 # =============== 对数据库中的数据进行重新排序操作 ================
195 # 定义权值
196 Weight = [0.3, 0.15, 0.1, 0.1, 0.1, 0.1, 0.05, 0.05, 0.05]
197 value, sum = [], 0
198 # 获取 Province = ‘广东省‘ 的所有数据
199 sample = SQL.searchData("Province = ‘广东省‘", False)
200 # 按照权值求出各个大学的总得分
201 for i in range(len(sample)):
202  for j in range(len(Weight)):
203  sum += sample[i][4+j] * Weight[j]
204  value.append(sum)
205  sum = 0
206 # 将结果通过 pandas 的 DataFrame 方法组成一个二维序列
207 university = [university[1] for university in sample]
208 uv, tmp = [], []
209 for i in range(len(university)):
210  tmp.append(university[i])
211  tmp.append(value[i])
212  uv.append(tmp)
213  tmp = []
214 df = DataFrame(uv, columns=list(("大学", "总分")))
215 df = df.sort_values(‘总分‘)
216 df.index = [i for i in range(1, len(uv)+1)]
217 # 输出结果
218 print("
>>> 筛选【广东省】的大学并通过权值运算后重排名的结果:
", df)
219 
220 # ===================== 在数据库中删除数据项 =====================
221 SQL.deleteData("Province = ‘北京市‘")
222 SQL.deleteData("Province = ‘广东省‘")
223 SQL.deleteData("Province = ‘山东省‘")
224 SQL.deleteData("Province = ‘山西省‘")
225 SQL.deleteData("Province = ‘江西省‘")
226 SQL.deleteData("Province = ‘河南省‘")
227 print("
>>> 数据删除成功!")
228 SQL.printData(SQL.getAllData())
229 
230 # ====================== 在数据库中删除表 ========================
231 SQL.destroyTable()
232 print(">>> 表删除成功!
技术图片技术图片技术图片

数据库实践

标签:sea   lda   tuple   out   dbn   DBName   fetch   方法   author   

热心网友 时间:2022-05-02 21:36

差不多就是数据库的系统概论,这是计算机相关专业必学课程。在做项目的后台如何管理数据,创建表删除表等。对表的建立等可SQL Severe软件上实践。

比如,做一个图书馆管理系统,我们会想,要建多少张不同的表来存储这些信息,每张表应放什么东西,每张表之间的联系是什么,这样建有没满足数据库的规范性、安全性等。

而且,只要是学软件,以后搞开发,必跟数据库打交道。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王者荣耀 王者荣耀钻石有几个等级? 王者钻石一共有几个段位 奔驰E200和E200K有什么区别么? 手机怎么隐藏游戏不被发现 求教玩魔兽世界最高画质特效全开的电脑配置 2200左右配一台电脑主机(显示器不算.就单主机),高手给推荐一下配置!要... 组装台式电脑2000左右玩魔兽求推荐能玩魔兽世界的台式电脑配置主机价 ... 玩60魔兽世界电脑配置魔兽世界需要什么配置的电脑能玩得流畅 ...2200块钱的组装电脑+显示器的,要求可以玩魔兽世界,使命召唤,CF等等... ...按括号中的要求完成改写后的句子,每个空格填一个单词。(5分)小题... 海尔热水器全部型号 数据库系统原理题目咨询 海尔热水器型号大全 海尔热水器型号含义 数据库系统原理的复习资料 数据库系统的概念是什么啊? 数据库系统定义? 数据库系统原理与设计 什么叫fd 《数据库系统原理教程》复习重点(new) 数据库系统原理案例有哪些 数据库系统原理 什么是存储过程有什么优点 数据库系统原理 数据库原理是什么 数据库系统原理的内容简介 电脑备份微信聊天记录在哪里看 手机微信备份到电脑的聊天记录怎么查看 微信备份聊天记录如何打开 微信备份好的聊天记录在哪里 如何查看微信备份的聊天记录 微信聊天记录备份到电脑上找不到 求一个视频制作软件。。。自带模板滴。。。。做一... 海尔热水器AFv和AF5有啥区别? 数据库系统原理的作品目录 海尔热水器型号及价格大全介绍 数据库系统原理论文 海尔电热水器选择什么型号的不会爆炸 数据库系统原理教程课后习题及答案(第四章) 海尔热水器一共有多少个型号,分别是什? 海尔热水器型号在哪里看 海尔热水器型号u1含义 海尔热水器60升哪个型号好 海尔热水器60升最新款有哪些型号说明书 海尔热水器遥控器要怎么对码?有人知道吗? 想买个60升的海尔热水器不知道哪个型号好?还有买... 海尔热水器型号es60h_d6s(2lp)u1中的2lp代表什么海... 海尔热水器什么型号好 给妈妈的一封信的作文怎么写 给妈妈的一封信的开头和结尾 给妈妈的一封信怎么写300字 二年级写给妈妈的一封信过 我想对妈妈说一封信作文怎么写?