Python全栈介绍MySQL数据库的示例

70次阅读
没有评论

共计 10974 个字符,预计需要花费 28 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家分享的是有关 Python 全栈介绍 MySQL 数据库的示例的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考。一起跟随丸趣 TV 小编过来看看吧。

主要三个方面:

1.Linux 终端命令

2.MySQL 语句

3.Python 调用

终端命令:

vi                                                                 文本编辑器

cat /etc/password | grep“用户名”        获取 user 表

sudo -i                                                       获取 root 权限

sudo apt-get install python3-pip             安装 pip3

sudo pip3 install pymysql                         安装 mysql

sudo apt-get install mysql-server             安装服务端

sudo apt-get install mysql-client             安装客户端

sudo apt-get update                               读取列表 保存到 /var/lib/apt/lists

sudo apt-get upgrade                             对比下载列表并更新

sudo /etc/init.d/mysql status                   查询状态

sudo /etc/init.d/mysql stop                     停止服务

sudo /etc/init.d/mysql restart                 重启服务

sudo /etc/init.d/mysql reload                 重新加载

mysql - h 主机地址 - u 用户名 - p 密码           链接 mysql

修改 mysql 默认字符集:

sudo -i                                                                       1. 获取 root

chmod  644 文件名                                                    2. 修改文件权限

cd etc/mysql/mysql.conf.d                                        3. 进入配置文目录

cp etc/msql.cnf/mysqld.cnf.bak                                4. 备份

subl mysqld.cnf                                                         5.vi 打开源文件

[mysqld]   目录

character_set_server = utf8                                       6. 添加命令

/etc/init.d/mysql

mysqldump - u 用户 - p 源库名 ~/xxx.sql            

数据备份:

参数:

–all-databases                                                   1. 备份所有库

库名                                                                     2. 备份单个库

-B 库 1 库 2..                                                          3. 备份多个库

库名 表 1 表 2…                                                     4. 备份指定库指定表

数据恢复:

mysql -uroot -p 目标库名 xxx.sql                                  1. 恢复备份库

mysql -uroot -p –one-database 目标库名 xxx.sql        2. 恢复备份内某一个库

恢复:表不删除 表记录删除覆盖

MySQL 远程连接:

sudo -i                                                               1. 管理员模式

cd /etc/mysql/mysql.conf.d/                             2.cd 到 mysql 目录

vi mysqld.cnf                                                     3. 打开注释掉默认 IP

#bind-address = 127.0.0.1                                4. 保存

/etc/init.d/mysql restart                                    5. 重启服务

授权用户:

grant 授权列表 on 库. 表 to“用户名“@”%”identified by“密码”with grant option          1. 命令格式

示例:grant all privileges on *.* to“tiger”@”%”identified by“123”with grant option;          2. 示例

all privileges、select、insert …                              4. 库. 表: *.*   所有库所有表  3. 权限列表

python3 模块安装:

模块名:pymysql

在线:sudo pip3 install pymysql

离线:pymysql-0.7.11.tar.gz

$ tar -zxvf pymyql-0.7.11.tar.gz

$ cd pymysql-0.7.11

$ sudo python3 setup.py install

验证:

$ python3

import pymysql

python2 模块安装:

模块名:MySQLdb

安装:sudo pip install mysql-python

sqlalchemy 框架 安装:

在线:sudo pip3 install sqlalchemy

离线:

$ tar -zxvf SQLAlchemy-1.2.10.tar.gz

$ cd SQLAlchemy-1.2.10

$ sudo python3 setup.py install

验证:

$ python3

import sqlalchemy

pymysql 使用:

from pymsql import *                                   导入模块

(db = pymysql.connect(…))                               1、建立数据库连接

c = db.cursor())                                                 2、创建游标对象

c.execute(“insert ….”)                                        3、游标方法:

db.commit()                                                      4、提交到数据库

c.close()                                                            5、关闭游标对象

db.close()                                                         6、断开数据库连接:

7.connect 对象:

db = pymysql.connect(参数列表)

1、host:主机地址, 本地 localhost

2、port:端口号, 默认 3306

3、user:用户名

4、password:密码

5、database:库

6、charset:编码方式, 推荐使用 utf8

8. 连接对象的方法:

数据库连接对象 (db) 的方法

1、db.close() 关闭连接

2、db.commit() 提交到数据库执行

3、db.rollback() 回滚

4、cur = db.cursor() 返回游标对象, 用于执行具体 SQL 命令

9. 游标对象的方法:

游标对象 (cur) 的方法

1、cur.execute(sql 命令,[列表]) 执行 SQL 命令

2、cur.close() 关闭游标对象

3、cur.fetchone() 获取查询结果集的第一条数据

((记录 1),)

4、cur.fetchmany(n) 获取 n 条

((记录 1),(记录 2))

5、cur.fetchall() 获取所有记录

ORM:orm(Object Relation Mapping 对象关系映射) 定义:把对象模型映射到 MySQL 数据库中

SQL 命令:

/var/lib/mysql                                                                          MySQL 数据目录

show variables like“autocommit”;                                           查询 commit 事务

begin;                                                                                    开启事务

commit;                                                                                  提交事务(MySQL 默认自动提交)

rollback;                                                                                终止事务

system sudo -i                                                                           由数据直接进入终端

show databases;                                                                    查看已有库

create database 库名;                                                            创建库

create database 库名 charcater set utf8;                              指定字符集

show create database 库名;                                                  查看库字符集

select database();                                                              查看当前所在库

use 库名;                                                                                切换库

drop database 库名;                                                              删除库

show tables;                                                                          查看已有表

create table 表名(字段名 1 数据类型,….);                          创建表

show create table 表名;                                                          查看表字符集

desc 表名;                                                                              查看表结构

drop table 表名;                                                                      删除表

insert into 表名 values(值 1),(值 2)…;                            插入完整记录

insert into 表名(字段名 1,…)values(值 1),…;              插入字段数据

select * from 表名 [where 条件];                                            查询所有字段

select 字段名 1,字段名 2,…from 表名[where 条件];                查看字段

alter table 表名 add 字段名 数据类型;                                         添加字段

alter table 表名 add 字段名 数据类型 first;                              头插)

alter table 表名 add 字段名 数据类型 after 字段名;                  指定插入)

alter table 表名 drop 字段名;                                                  删除字段

alter table 表名 modify 字段名 新数据类型;                            修改数据类型

alter table 表名 rename 表名;                                                表重命名

delete from 表名 where 条件;                                                删除表记录(必须加 where)

update 表名 set 字段 1 = 值 1,字段名 2 = 值 2,… where 条件       更改表记录(必须加 where)

alter table 表名 change 原名 新名 数据类型;                          字段重命名

create table 表名 select .. from 表名 where 条件;                     复制表(不复制 key)

create table 表名 select * from 表名 where false;                     复制表结构(不复制 key)

sex enum(“M”,”F”,”S”)not null defaulf“S”                      约束

show variables like 变量名;                                                    查询 MySQL 变量

select 字段名列表 from 表名列表;                                              (笛卡尔积)

select t1.name,t2.name from t1,t2 where 条件                         多表查询

create index 索引名 on 表名(字段名);                                         添加普通索引

create table(….index(字段名),…)                                      创建表时创建普通索引

drop index 索引名 on 表名;                                                      删除普通索引

show index from 表名;                                                            查看普通索引

create unique index 索引名 on 表名(字段名);                      添加唯一索引

create table 表名(…. , unique key (字段名) );                             创建表时创建唯一索引

drop unique index 索引名 on 表名;                                        删除唯一索引

show unique index from 表名;                                                查看唯一索引

alter table 表名 add primary key(字段名);                          添加主键索引

create table 表名(…. , id int,primary key (字段名) );                 创建表时创主键一索引

(id int primary key auto_increment,)auto_increment=10000;     设置自增长起始值

alter table 表名 modify id int auto_increment;                             添加自增长

alter table 表名 auto_increment=20000;                                     修改自增长起始值

alter table 表名 modify id int;                                                       删除自增长

alter table 表名 drop primary key;                                                 删除主键索引

show index from 表名 G;                                                             查看表索引

desc 表名;                                                                                查看表结构(key)

Non_Unique:1  :index                                                         普通索引(查询结果)

Non_Unique:0  :unique                                                         唯一索引(查询结果)

alter table 表名 drop foreign key 外键名;                                     删除外键

show create table 表名;                                                                 查看外键名

创建外键:

create……t1();

create table t2(

foreign key(参考字段名)

references 主表(被参考字段名)

on delete 级联动作

on update 级联动作);

添加外键:

alter table 表名 add

foreign key(参考字段) references 主表(被参考字段)

on delete …

on update …

级联动作:

restrict(默认)不允许主表操作从表

cascade:跟随删除、更新

set null:主表更改后从表值为 NULL

内链接:

select 字段名 from 表 1

inner join 表 2 on 条件

inner join 表 3 on 条件…;

外链接. 左链接:

以左表为主显示查询结果

select 字段名 from 表 1

left join 表 2 on 条件

left join 表 3 on 条件…;

右链接

以右表为主显示查询结果

数据导入:

load data  infile“文件名”

into table 表名

fields terminated by“分隔符”

lines terminated by“n”;

数据导出:

select … from 表名

into outfile“/var/lib/mysql-files/ 文件名”

fields terminated by“分隔符”

lines terminated by“n”;

数据恢复:

恢复单个库

mysql -uroot -p 目标库名 xxx.sql

从所有库备份中恢复某一个库(-one-database)

mysql -uroot -p –one-database 目标库名 xxx.sql

恢复:表不删除 表记录删除覆盖

数据备份:

mysqldump - u 用户 - p 源库名 ~/xxx.sql

–all-databases   备份所有库

库名             备份单个库

-B 库 1 库 2..     备份多个库

库名 表 1 表 2…   备份指定库指定表

运行时间检测:

开启:set profiling=1;

关闭:set profiling=0;

查询执行记录:show profilings;

SQL 查询:

3.select … 聚合函数 from 表名

1.where

2.group by…

4.having …

5.order by …

6.limit …;

查询嵌套:

select … from 表名 where 条件(select ….);

2、找出每个国家攻击力最高的英雄的名字和攻击值

select name,gongji from sanguo

where

(country,gongji) in

(select country,max(gongji) from sanguo group by country);

where:只能操作表中实际存在的字段

group by:给查询结果进行分组

having:对查询结果进一步筛选

distinct:不显示字段重复值

show engines;                                                                   查看所有存储引擎

show create table 表名;                                                     查看表的存储引擎

create table 表名(…)engine=myisam;                                 创建表时指定存储引擎

alter table 表名 engine=innodb;                                       添加储存引擎

InnoDB:

InnoDB 特点(2 文件):

行级锁、支持外键、事务操作

.frm(表结构,索引)、.ibd(表记录)

MyISAM:

MyISAM 特点(3 文件):

独享表空间、表级锁

.frm(结构)、.myd(记录)、.myi(索引)

锁:

select:加读锁之后别人不能更改表记录, 但可以进行查询

insert、delete、update:加写锁之后别人不能查、不能改

锁粒度:

表级锁:myisam

行级锁:innodb

调优:

1. 选择合适的存储引擎

2. 常用字段建立索引

3.where 避免使用 !=、NULL 判断、or 链接、

like 前置 %、in、not in、* 代替字段、

数据类型:

数据类型:

int             大整型(4 个字节) 2**32 – 1(4294967295)

tinyint         微小整型(一个字节)

有符号(signed 默认):-128 ~ 127

无符号(unsigned):0 ~ 255

smallint         小整型(2 字节)

bigint           极大整型(8 字节)

float           浮点数(4 个字节,7 个有效位)

字段名 float(m,n)m:总位数 n:小数位数

decimal         浮点数(28 个有效位)

字段名 decimal(m,n)m:总位数 n:小数位数

将 9 的倍数包装成 4 个字节

余数   字节

0      0

1-2     1

3-4     2

5-6     3

7-9     4

字段名 enum(值 1,值 2…);              单选(enum)

字段名 set(值 1,值 2…);                多选(set)

(多项放在一个字符串内用,号隔开)

date:“YYYY-MM-DD”

time:“HH:MM:SS”

datetime:“YYYY-MM-DD HH:MM:SS”

timestamp:“YYYY-MM-DD HH:MM:SS”

datetime:不给值默认返回 Null

timestamp:不给值默认返回系统时间

时间函数

now()                                                          返回服务器当前的时间

curdate()                                                    返回当前时期

curtime()                                                    返回当前日期

year(date)                                                  返回指定时间的年份

date(date)                                                  返回指定时间的日期

time(date)                                                  返回指定时间的时间

聚合函数

avg(字段名):求该字段的平均值

sum(字段名):求和

max(字段名):最大值

min(字段名):最小值

count(字段名):统计该字段的个数

运算符:+ – * / %

时间运算符

select * from 表名

where 字段名 运算符(时间 -interval 时间间隔单位);

时间间隔单位:1 day | 2hour | 1 minute | 2year | month

数值比较:=  !=     = =

字符比较:=  !=

逻辑比较:and   or

范围内比较:

1.where 字段名 between 值 1 and 值 2

2.where 字段名 in(值 1,值 2,….)

3.where 字段名 not in(值 1,值 2,…)

空:where name is null

非空:where name is not null

NILL:空值,只能用 is 或 is not 取匹配

“”:空字符串,用 = 或  != 去匹配

模糊比较:

where 字段名 like 表达式

表达式

_ : 匹配单个字符

%:匹配 0 到多个字符

NULL 不会被统计

排序:order by ASC | DESC

显示:limit 开始显示位置,条数

每页显示 n 条记录,显示第 m 页:

limit(m-1)*n,n

MySQL 与 Python 交互

# mysqlpython.py
#  导入 mysql 模块
from pymysql import *

 def __init__(self, database, #  库  host= 127.0.0.1 , # ip 地址  user= root , #  用户名  password= 123456 , #  密码  port=3306, #  端口  charset= utf8 ): #  字符集  self.host = host  self.database = database  self.user = user  self.password = password  self.port = port  self.charset = charset  def open(self): #  创建数据库链接函数  self.db = connect(host=self.host,  database=self.database,  user=self.user,  password=self.password,  port=self.port,  charset=self.charset)  self.cur = self.db.cursor() #  创建游标对象  def close(self): #  创建断开数据库链接 关闭游标函数  self.cur.close()  self.db.close()  def zhixing(self, sql, L=[]): #  创建 pymysql.execute()  方法函数  try:  self.open() #  链接数据库  self.cur.execute(sql, L) #  参数化执行SQL命令  self.db.commit() #  提交数据  print(ok)  except Exception as e:  self.db.rollback() #  出错取消提交  print(Failed , e)  self.close() #  断开数据库链接 关闭游标  def all(self, sql, L=[]):  try:  self.open()  self.cur.execute(sql, L)  result = self.cur.fetchall()  return result  except Exception as e:  print(Failed , e)  self.close()

数据库用户登录

from mysqlpython import Mysqlpython
from hashlib import sha1
uname = input(请输入用户名:)
pwd = input(请输入密码:)
#  用 sha1 给 pwd 加密
s1 = sha1() #  创建 sha1 加密对象
s1.update(pwd.encode( utf8)) #  指定编码
pwd2 = s1.hexdigest() #  返回 16 进制加密结果
sqlh = Mysqlpython(db4)
select =  select password from user where 
 username=%s; 
result = sqlh.all(select, [uname])
# print(result)
# ((7c4a8d09ca3762af61e59520943dc26494f8941b ,),)
if len(result) == 0:
 print(用户名不存在)
elif result[0][0] == pwd2:
 print(登录成功)
else:
 print(密码错误)

ORM  sqlalchemy 框架

#  创建一张表  #  连接数据库的模块  from 
sqlalchemy import create_engine fromsqlalchemy.ext.declarative
 import declarative_base from sqlalchemy import Column, Integer
,String engine = create_engine( mysql+pymysql://root:123456@localhost/db4 , 
encoding= utf8 ) Base = declarative_base() # orm 基类  class User(Base):
 #  继承 Base 基类  __tablename__ =  t123  id =Column(Integer, primary_key=True) 
name = Column(String(20)) address = Column(String(40))Base.metadata.create_all
(engine)

感谢各位的阅读!关于 Python 全栈介绍 MySQL 数据库的示例就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计10974字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)