数据库其实并不高深, 它就是一个能存储数据到硬盘上的一个软件. 本质就是一个软件. 数据库承载了我们目前市面上能见到的绝大多数的软件最底层的数据支持. 可以这么说. 如果没有数据, 就没有目前互联网的高速发展. 而数据库作为承载数据的载体. 它的地位也是非常高的。
数据库的分类早期, 数据库分为层次型数据库, 网络型数据库和关系型数据库, 在今天的互联网高速发展下, 数据库被分为关系型数据库和非关系型数据库。
关系型数据库
关系型数据库把复杂的数据逻辑归纳为二元结构(二维表格结构), 并且, 表格与表格之间可以互相的关联,让数据的存储和查询都变得更加合理简单。
非关系型数据库
非关系型数据库也被称为NoSql。首先, SQL是我们操作数据库的编程语言,专门为数据库而设计的,NoSql表示Not only SQL,可不是No SQL。NoSQL的产生不是说彻底否定关系型数据库的存在, 而是对常见的关系型数据库进行补充。目的是更好的为应用程序提供数据支撑。
传统的关系型数据库在遇到高并发,大量数据IO请求的时候会显得力不从心。此时NoSQL就派上用场了,主旨是更快的为应用提供数据,承载更多的并发。
百度网盘链接:https://pan.baidu.com/s/1zVWlbwYe7cCWzT0dcHz7Jw
密码:369u
具体的安装流程在压缩包内。
具体可以简介下面的链接:
https://blog.csdn.net/weixin_48502798/article/details/115970263?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163343839916780255246535%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163343839916780255246535&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-115970263.first_rank_v2_pc_rank_v29&utm_term=navicat%E6%BF%80%E6%B4%BB&spm=1018.2226.3001.4187
创建数据库
create database 库名 charset utf8;
查看数据库
1、查看创建的数据库
show create database 库名;
2、查看所有数据库
show create database db1;
改数据库
alter database 库名 charset gbk; #修改数据库编码
删
删除数据库
drop database 库名;
创建表
create table 表名(id int,name char); #将id的属性定义int型,name定义为char型
注意:必须在创建好的数据库中
改表
#modify为修改的意思
alter table 表名 modify name char(6);
#改变name为大写的NAME
alter table 表名 change name NAMA char(7);
删表
drop table 表名;
插入数据
insert 表名(属性1,属性2) values(值1,值2);
查找
select 需要查找的数据的名称 from 数据库.表名; select * from 数据库.表名; #*表示表中所有的元素
改数据
update数据库.表名 set name='zhangsan'; #将name赋值为zhangsan update 数据库.表名 set name='alex' where id=2; #在id=2的地方将name对应的位置赋值为alex
删
delete from 表名 where id=2; #将表中id为2的删除 delete from 表名; #直接删除表pymysql库 pymysql库的安装
在命令行中输入pip install pymysql(或者 pip3 install pymysql)
具体操作1、导库
import pymysql
2、所需的具体函数
pymysql.connect()参数说明:(连接数据库时需要添加的参数) host(str): MySQL服务器地址 port(int): MySQL服务器端口号 user(str): 用户名 passwd(str): 数据库密码 db(str): 数据库名称 charset(str): 连接编码 connect()对象支持的方法: cursor() 使用该连接创建并返回游标 commit() 提交当前事务 rollback() 回滚当前事务 close() 关闭连接 cursor对象支持的方法: execute(op) 执行一个数据库的查询命令 fetchone() 取得结果集的下一行 fetchmany(size) 获取结果集的下几行 fetchall() 获取结果集中的所有行 rowcount() 返回数据条数或影响行数 close() 关闭游标对象
3、连接数据库
conn = pymysql.connect( # 创建数据库连接
host='主机ip', # 要连接的数据库所在主机ip
user='用户名', # 数据库登录用户名
password='密码', # 登录用户密码
database='数据库名'#所要连接的数据库
charset='utf8' # 编码,注意不能写成utf-8
)
4、创建游标并创建库
mydb=db.cursor()
mydb.execute("create database 库名")
#也可以是库名,如果上面没有指定的数据库,则可以创建一个数据库,如果指定了一个库,则可以在这个数据库创建一个表
mydb.commit() #将sql语句提交给数据库
注意:最后一定要通过close()关闭数据库
5、数据库的查询操作
通过select进行查询
sql="select*from表名" mydb.execute(sql) mydb.commit() #将sql语句提交给数据库
5,数据的插入操作
sql = """insert into 库名 (属性1,
属性2,属性3)
values(值1,值2, 值3)"""
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
插入操作的示例
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(
host=“你的数据库地址”,
user=“用户名”,
password=“密码”,
database=“数据库名”,
charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
# 得到一个可以执行SQL语句并且将结果作为字典返回的游标
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定义要执行的SQL语句
sql = "INSERT INTO 表名(属性) VALUES (%s)"
# 执行SQL语句
cursor.execute(sql,value) #占位符所代表的值
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()
注意:%s为占位符
示例1、简单的创建和插入操作示例
import pymysql
con=pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
database='pythondb',
charset='utf8')
cursor=con.cursor()
sql='''
create table student2 (id int(13) not null primary key,name char(8) not null,sex char(2) not null,age int(3) not null)
'''
cursor.execute(sql)
sql1='''
insert into student2 (id,name,sex,age) values(%s,%s,%s,%s)
'''
values=(1908000,'tom','M',20)
cursor.execute(sql1,values)
con.commit()
cursor.close()
con.close()
#选择:select * from table1 where 范围
#插入:insert into table1(field1,field2) values(value1,value2)
#删除:delete from table1 where 范围
#更新:update table1 set field1=value1 where 范围
#查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
#排序:select * from table1 order by field1,field2 [desc]
#总数:select count as totalcount from table1
#求和:select sum(field1) as sumvalue from table1
#平均:select avg(field1) as avgvalue from table1
#最大:select max(field1) as maxvalue from table1
#最小:select min(field1) as minvalue from table1
2、爬取豆瓣前250电影排名可能为例
import requests
from lxml import etree
import pymysql
import pandas
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"}
con=pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
database='pythondb',
charset='utf8')
cursor=con.cursor()
sql='''
create table if not exists new_movie_top250 (排名 int(4) not null primary key,电影名 char(20) not null,评分 char(10) not null,封面地址 varchar(100) not null)
'''
cursor.execute(sql)
con.commit()
# cursor.close()
# con.close()
sql1='''
insert into new_movie_top250(排名,电影名,评分,封面地址) values (%s,%s,%s,%s)
'''
number1 = []
title1 = []
num1 = []
ing1 = []
img1 = []
for page in range(0, 10):
url = 'https://movie.douban.com/top250' + '?start=' + str(page * 25)
res = requests.get(url, headers=headers, timeout=10)
res.encoding = 'utf-8'
res.text
html = etree.HTML(res.text)
number = html.xpath('//div[@]/em/text()')
title = html.xpath('//div[@]/a/span[1]/text()')
rating_num = html.xpath('//div[@]/span[@]/text()')
ing = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')
img = html.xpath('//div[@]/a/img/@src')
values=list(zip(number,title,rating_num,img))
print(values)
try:
cursor.executemany(sql1,values)
con.commit()
print("插入成功!")
except:
con.rollback()
print("插入失败!")
cursor.close()
con.close()
注意:1、此例中用来executemany()方法进行大批量的数据插入。
2、通过zip()方法将爬取下来需要注入的结果变成元组形式,从而进行SQL语言的拼接。



