搜索
首页数据库mysql教程Python全栈介绍MySQL 数据库

Python全栈介绍MySQL 数据库

Dec 17, 2020 am 10:38 AM
mysqlpython全栈

mysql教程栏目Python全栈讲解数据库

Python全栈介绍MySQL 数据库

推荐(免费):mysql教程

主要三个方面:

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 b6b716428aeec41eb6037989689a3301>> 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 38663d0e8668a3967c6ae5c01b144434 ~/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 *


class MysqlPython:
    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)
# ((&#39;7c4a8d09ca3762af61e59520943dc26494f8941b&#39;,),)

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 数据库的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
MySQL的位置:数据库和编程MySQL的位置:数据库和编程Apr 13, 2025 am 12:18 AM

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

MySQL:从小型企业到大型企业MySQL:从小型企业到大型企业Apr 13, 2025 am 12:17 AM

MySQL适合小型和大型企业。1)小型企业可使用MySQL进行基本数据管理,如存储客户信息。2)大型企业可利用MySQL处理海量数据和复杂业务逻辑,优化查询性能和事务处理。

幻影是什么读取的,InnoDB如何阻止它们(下一个键锁定)?幻影是什么读取的,InnoDB如何阻止它们(下一个键锁定)?Apr 13, 2025 am 12:16 AM

InnoDB通过Next-KeyLocking机制有效防止幻读。1)Next-KeyLocking结合行锁和间隙锁,锁定记录及其间隙,防止新记录插入。2)在实际应用中,通过优化查询和调整隔离级别,可以减少锁竞争,提高并发性能。

mysql:不是编程语言,而是...mysql:不是编程语言,而是...Apr 13, 2025 am 12:03 AM

MySQL不是一门编程语言,但其查询语言SQL具备编程语言的特性:1.SQL支持条件判断、循环和变量操作;2.通过存储过程、触发器和函数,用户可以在数据库中执行复杂逻辑操作。

MySQL:世界上最受欢迎的数据库的简介MySQL:世界上最受欢迎的数据库的简介Apr 12, 2025 am 12:18 AM

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

MySQL的重要性:数据存储和管理MySQL的重要性:数据存储和管理Apr 12, 2025 am 12:18 AM

MySQL是一个开源的关系型数据库管理系统,适用于数据存储、管理、查询和安全。1.它支持多种操作系统,广泛应用于Web应用等领域。2.通过客户端-服务器架构和不同存储引擎,MySQL高效处理数据。3.基本用法包括创建数据库和表,插入、查询和更新数据。4.高级用法涉及复杂查询和存储过程。5.常见错误可通过EXPLAIN语句调试。6.性能优化包括合理使用索引和优化查询语句。

为什么要使用mysql?利益和优势为什么要使用mysql?利益和优势Apr 12, 2025 am 12:17 AM

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

描述InnoDB锁定机制(共享锁,独家锁,意向锁,记录锁,间隙锁,下一键锁)。描述InnoDB锁定机制(共享锁,独家锁,意向锁,记录锁,间隙锁,下一键锁)。Apr 12, 2025 am 12:16 AM

InnoDB的锁机制包括共享锁、排他锁、意向锁、记录锁、间隙锁和下一个键锁。1.共享锁允许事务读取数据而不阻止其他事务读取。2.排他锁阻止其他事务读取和修改数据。3.意向锁优化锁效率。4.记录锁锁定索引记录。5.间隙锁锁定索引记录间隙。6.下一个键锁是记录锁和间隙锁的组合,确保数据一致性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)