3.4 Mysql数据库与Excel的不同
拆表操作
Excel:
1.储存有限
2.呈现的是全部数据
Mysql:
1.去除重复信息
2.编号关联起来
3.分开
4.增加信息可以分别在每个表中增加
3.5 命令行操作数据库 (一)
使用命令行操作数据库 视频中:使用 sequel pro 进行操作(和在终端执行效果是一样的)
#创建数据库
In [ ]: create database Examination_copy;
#删除数据库
drop database Examination_copy;
#指定字符集和校对集,创建字符库
create database Examination_copy default charest utf8mb4 collate utf8mb4_general_ci;
#创建表格 (一般是设计好了的)
CREATE TABLE 'class'('id' int(11) unsigend NOT NULL AUTO_INCRMENT,'name' varchar(80) NOT NULL,PRIMARY KEY('Id'));
#3.5中补充关系型数据库
In [ ]: import json
data_1 = "{'a': 1,'b': 2,'c': 3}"
data_2 = '{"a": 1,"b": 2,"c": 3}'
j_data = json.lodas(data_2)
type(j_data)
3.6 命令行操作数据库 (二)
In [ ]:
先在终端,又在sequel pro
#创建表格 (一般是设计好了的)
In [ ]:
CREATE TABLE 'class'('id' int(11) unsigend NOT NULL AUTO_INCRMENT,'name' varchar(80) NOT NULL,PRIMARY KEY('Id'));
3.7 命令行操作数据库 (三)
#数据库中的小数位,也是按照01101010001存储
In [ ]:
0.4 = 01011010
Mysql小数转二进制
3转换为二进制为—— 11 整数部分 0.4转换为二进制 —— 0.50+0.251+0.125*1 结果只会无限逼近0.4
floot类型不会那么无限,但它仍是有误差的
DECMAL能保证浮点误差小点
时间格式
字符串
Mysql数据类型 http://www.runoob.com/mysql/mysql-data-types.html
3.8 命令行操作数据库 (四)
#创建表格 (在此基础上改动,即可创建出其他的表格)
In [ ]:
CREATE TABLE 'class'('id' int(11) unsigend NOT NULL AUTO_INCRMENT,'name' varchar(80) NOT NULL,PRIMARY KEY('Id'));
#插入数据
In [ ]:
insert into 'class'('id''name')
values(1,'高一一班')
#修改数据 高一三班 改为 高一五班
In [ ]:
update 'class'set'name' = '高一五班'
where 'name' = '高一三班';
#如果确定了id,操作删除数据:
update 'class'set'name' = '高一五班'
where 'id' = '6';
#删除操作
In [ ]:
delete from 'class'
where 'id' = 6
使用Python操作数据库
3.9 Python操作数据库 (一)
Windows中的MySQL软件 (在百度里找,安装)
使用Python操作数据库
In [13]: import MySQLdb
#需要安装
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-13-dd22983d5391> in <module>()
----> 1 import MySQLdb
ModuleNotFoundError: No module named 'MySQLdb'
Python安装第三方库
1.pip; 举例: pip install pymysql
2.conda; 举例: conda install pymysql
3.10 Python操作数据库 (二)
In [ ]: import MySQLdb
#在终端操作:
#连接数据库
In [ ]:
db = MySQLdb.conect()
# conect(括号里传入配置信息)
In [ ]:
#先把信息放到字典里面:
DATABASE = {
'host':'localhost' #如果是远程数据库,此处为远程服务器的IP地址,也就是127.0.0.1
'database':'Examination',#在终端 database 有很多数据库,要默认一个,这里默认的是 Examination
'user':'root', #用户名 这里是root
'password':'wangwei'#密码
}
#可以直接写远程数据库的地址
In [ ]:
DATABASE = {
'host':'127.0.0.1' ###
'database':'Examination',
'user':'root',
'password':'wangwei'
}
db = MySQLdb.conect()
# 一个配置信息写成字典,如果是多个要写成列表
In [ ]:
DATABASE = {
'host':'localhost'
'database':'Examination',
'user':'root',
'password':'wangwei'
}
# 此时db连接到了数据库
db = MySQLdb.conect('localhost','root','wangwei','Examination')
# 等价于:因为db括号中的位置不易记住,所以这么表示:
db = MySQLdb.conect(host = 'localhost',user = 'root',password = 'wangwei',db = 'Examination')
# 同时等价于
db = MySQLdb.conect(**DATABASE)
### db 就代表数据库
游标 使用游标操作数据库
In [ ]:
cursor = db.cursor()
查询语句
In [ ]:
sql = "select * from class" #使用游标执行 sql 语句
cursor.execute(sql)
results = cursor.fetchall() # fetchall用游标获取结果 赋值给results
for row in results: #(row:行)用for循环打印 results
print(row)
打印出来出现问题 是因为,在连接数据库时,没有按照字符集指定编码格式 需要再加一个参数: 'charaset':'utf8mb4'
In [ ]:
DATABASE = {
'host':'localhost'
'database':'Examination',
'user':'root',
'password':'wangwei'
'charaset':'utf8mb4'
}
# 此时db连接到了数据库
db = MySQLdb.conect('localhost','root','wangwei','Examination')
# 等价于:因为db括号中的位置不易记住,所以这么表示:
db = MySQLdb.conect(host = 'localhost',user = 'root',password = 'wangwei',db = 'Examination')
# 同时等价于
db = MySQLdb.conect(**DATABASE)
In [ ]:
sql = "select * from class" #使用游标执行 sql 语句
cursor.execute(sql)
results = cursor.fetchall() # fetchall用游标获取结果 赋值给results
for row in results: #(row:行)用for循环打印 results
print(row)
#此时输出就不在是乱码了
根据上面做其他,限制长度等:
In [ ]:
sql = "select * from studend where id <20,limit 10" #limit 限制数量
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
print(row)