本文介绍: 最近接了一个项目需要使用数据库处理后台数据,虽然此前有下载安装过MySQL,但是很遗憾的是当时并没有花很多时间,也就导致数据库基本没学明白,正好趁这次机会来好好学习一下MySQL。一般程序运行,产生的数据都是存在内存当中,当程序终止的时候,通常要写入文件保存磁盘,而数据库就是一种便捷地交互大量数据方式,尤其是查找功能实现。因此,简单来说,数据库就是程序便捷存取大量数据的地方。数据库有很多类型,但在Windows比较推荐的是MySQL和SQLite

0 前言

  最近接了一个项目,需要使用数据库处理后台数据,虽然此前有下载安装过MySQL,但是很遗憾的是当时并没有花很多时间,也就导致数据库基本没学明白,正好趁这次机会来好好学习一下MySQL。

1 参考链接

2 数据概述

  一般程序运行,产生的数据都是存在内存当中,当程序终止的时候,通常要写入文件保存到磁盘,而数据库就是一种便捷地交互大量数据的方式,尤其是查找功能实现。因此,简单来说,数据库就是程序便捷存取大量数据的地方。
  数据库有很多类型,但在Windows比较推荐的是MySQLSQLite这里我们简单介绍一下MySQL在python当中的使用方法

3 MySQL配置

  首先来看看MySQL如何配置。数据库本质上也是一种高级语言,因此也需要配置它的运行环境

3.1 下载安装

  MySQL是免费软件,因此完全可以官网下载。首先打开官网 https://www.mysql.com/,直接滑到最底下,可以看到提供的几个常用的下载

在这里插入图片描述
我们需要的是只是数据库服务器,即第一个MySQL Community Server

在这里插入图片描述

在这里插入图片描述

然后直接解压文件夹放到软件安装目录下,如Program Files或Program Files (x86)(自行选择),接下来就是配置了。

3.1.1 其他安装方式

  如果电脑版本比较老,或者是缺少一些vc++的组件,用上面这种方式配置可能会遇到麻烦,所以建议直接用MySQL提供的installer来安装,它可以安装几乎所有的MySQL相关的软件。同时它还会在安装检测电脑此时是否满足安装条件,如果缺少组件,会自动下载好。
  来到官网下载界面,往下滚找到这个下载链接
在这里插入图片描述
在这里插入图片描述

下载好之后直接安装即可这里建议点击Custom方式,便于自定义软件和数据的路径参考链接

关键步骤
在这里插入图片描述

3.2 环境配置

[client] #客户端设置
default-character-set=utf8 # 设置mysql客户端默认字符集

[mysqld]
basedir=C:Program Filesmysql-8.0.32-winx64 #软件所在路径
datadir=C:Program Filesmysql-8.0.32-winx64data #数据(如自己建立的数据库)存放路径
port=3306 #连接端口默认是这个值
character-set-server=utf8 # 服务端使用字符集默认为8比特编码的latin1字符集
default-storage-engine=INNODB # 创建新表时将使用默认存储引擎

这里记得要加上后面的--console参数,否则终端不会输出内容

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

记得密码设置简单点。
  设置成功后退出即可
在这里插入图片描述

到此,数据库的配置部分就完成了,接下来就可以正常连接使用了。

3.3 基本使用

  数据库的连接可以直接在终端输入命令,也可以下载个数据库可视化软件

  直接在命令行连接数据库:

mysql -uroot -p #以root身份登录,后面需要输入密码
mysql -uroot -pmysql #直接包含密码登录

其中,-uroot之间可加可不加空格-p和密码之间不能加空格,否则会被识别为数据库的名称,这样可以实现一次登录,不用后面再输入密码,不过命令行会有警告。

  虽然可以在命令行显示数据库和表格,但终究不够直观,因此推荐使用一款数据库可视化的软件,这样看起来更加直观。数据可视化软件有很多,比如MySQL自己家的workbench就算一个,感兴趣的可以下载安装试试。此外,还有一些免费软件,如 SQLyog , 我使用的是学校买的付费软件 Navicat ,虽然软件不同,但使用方式基本差不多,也比较简单,所以不再赘述。

3.4 问题解决

  这里记录一些常见的问题解决方案(都适用MySQL8)

3.4.1 如何重置密码

  具体操作步骤参考这个链接,已经讲得很详细了,这里不再赘述。

3.4.2 如何重置服务名称

  最近遇到一个问题,那就是发现自己不记得服务名称是什么了,因此也进不去服务,遇到这种情况其实最合适的应该是按照上面的配置步骤重新配置一遍就好了,如果不介意的话,甚至可以删掉data目录再配置一遍。

4 SQL语句

  上面的配置过程说白了,只是准备工作,真正想使用MySQL,还是要学习SQL语句。这里推荐大家去参考官网教程,以及这个软件站提供的参考手册,当然也可以看一下菜鸟教程,也讲得非常详细。

  总而言之,SQL语句作为一门“描述性语言”,入门是非常简单的,如果遇到问题建议点对点在搜索引擎里面搜索然后记录一些关键点即可

推荐一篇文章,确实写得很详细,可怕的收藏量。。。

4.1 一些关键点 【时时更新

4.2 设置MySQL的最大连接数

  最近才知道,原来MySQL本身也是有最大连接数的限制的,但只要不是特别大的项目一般来说不会超过。

#1.查看最大连接数
show variables like '%max_connections%';

#2.修改最大连接数
set GLOBAL max_connections = 200;

参考链接

5 在python中使用MySQL

  最后再来看看python当中如何使用MySQL。似乎支持个数据库的第三方包还不少,不过建议还是用使用最为普遍的——pymysql,首先需要安装:pip install pymysql

import pymysql

db = pymysql.connect(host='localhost', user='root', password='mysql',  #连接到数据库需要指定的最少信息
                     db = 'demo', database='demo', #指定选择的数据库,任选一个都可,前面是简写
                     passwd='mysql', #密码也可以用passwd简写形式
                     autocommit=True, #设置修改自动提交到数据库
                     auth_plugin_map='mysql_native_password') #设置身份认证,8.0版本之后建议加上
cursor = db.cursor() #创建一个指针,之后基本所有的操作都是使用指针实现
cursor.execute('show databases;') #执行SQL语句
db.commit() #将修改提交到数据库——如果连接时参数autocommit设置为false要加上
cursor.fetchall() #获取上一条SQL语句的执行结果,如查询结果
cursor.fetchone() #获取执行结果一行
db.close() #关闭数据库

其实常用的代码就是上面这几行,所以主要还是在使用SQL语句实现功能。其中主要有两个注意事项

最后再来看个例子,这个库也就基本学会了 【代码原链接

import pymysql

try:
    db = pymysql.connect(host='localhost', user='root', passwd='666666', port=3306, db='Mysql8')
    print('连接成功!')
except:
    print('something wrong!')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)
print('建表成功!')
db.close()

5.1 如何获取操作数据库的异常

  在操作数据库时,为了排除异常情况,往往会加上try except套装,但是最近才知道except后面要加上Exception,来捕捉出现的异常情况,而且没有必要去找pymysql对应异常模块,直接用python自带的这个就可以。

  下面是一个代码示例

try:
	c = cursor.execute(sql) #指针执行SQL语句
except Exception as e:
	self.logger.error(f"The SQL code Execution ERROR: "+str(e))
	return -1

这个句式就能捕捉到sql语句执行时的错误debug更加方便。

6 多线程访问数据库 dbutils

  当主程序是多线程同时在执行时,且每个线程都需要操作数据,如果只用pymysql实现,相当于一个连接得要一直开着,这样据说运行久了会出问题。因此可以采用dbutils这个第三模块来实现数据库多连接。
  这个第三模块原理就是构造个数据库的连接池,如果有需要连接就直接去池中申请一个连接,然后使用完再释放。
  使用前先安装:pip install dbutils调用方式如下所示

from dbutils.pooled_db import PooledDB 

注意:这里的dbutils是小写!很多教程都是大写,估计是老版的库

  这个模块的具体使用建议参考这篇文章。其中使用到queue模块用于多线程操作,使用方法可以参考这篇文章

一点小思考:用过这个库之后,我发现其实它也需要创建然后关闭连接,如果只使用pymysql用在多线程当中,相当于需要创建多个对象然后访问数据库,那么第二种方式会比第一种差很多吗?

原文地址:https://blog.csdn.net/ZHOU_YONG915/article/details/120645323

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_13029.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注