luffy数据库配置
创建数据库
1.管理员连接数据库 mysql -uroot -proot 2.创建数据库 create database luffy ; 3.查看用户 select user,host,password from mysql.user; # 5.7往后的版本查看用户 select user,host,authentication_string from mysql.user;
创建数据库用户并授予其使用某个库的权限
正常情况下,公司不会让我们用root用户来操作数据库,
因为root用户的权限太高了,为了安全起见,
会通过创建一个用户并授予这个用户操作某个库的权限,
所以下面我们就用这种方法来授予用户操作我们项目依赖的数据库的权限。
设置权限账号密码 # 授权账号命令 grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'; # 配置任意ip都可以连入数据库的账户 grant all privileges on luffyapi.* to 'yessir'@'%' identified by 'Yessir123?'; # 创建一个用户yessir并授予他操作luffyapi这个库的所有权限 # %表示支持所有ip连接(有些版本只支持远程连接 本地的连接不上) *表示这个库下面的所有表 # 由于数据库版本问题,可能本地连接不上,给本地用户单独配置 grant all privileges on luffyapi.* to 'yessir'@'localhost' identified by 'Yessir123?'; # 刷新权限 flush privileges; # 用户名:yessir # 密码:Yessir123?
版本变更问题
# MySQL 8.0已经不支持下面这种命令写法 grant all privileges on *.* to root@"%" identified by "."; # 正确的写法是先创建用户 CREATE USER 'root'@'%' IDENTIFIED BY 'Hadoop3!'; # 刷新一下权限 flush privileges; # 再给用户授权 grant all privileges on *.* to 'root'@'%' ;
项目中配置
# settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'luffyapi', 'USER':'luffyapi', 'PASSWORD':'Luffy123?', 'HOST':'127.0.0.1', 'PORT':3306 } }
# 我们用pymysql连接数据库
但是当django版本超过2.0.7 就会出现报错
需要修改两处源码,具体如下所示:
运行项目,会报错,
django 默认使用MySQLdb链接mysql数据库,
但是现在MySQLdb只在python2.x上有效,python3.x上不行了
python3.x有pymysql,我们可以用pymysql来代替MySQLdb,
因此这里我们需要用pymysql来连接数据库,在__init__.py文件中书写如下代码:
# __init__.py 文件中 import pymysql pymysql.install_as_MySQLdb()
运行项目,出现如下报错:
我们只需要将那两行代码注释了即可。
但是运行项目后发现还是报错,如下:
这样,项目就可以正常运行了。
数据库密码问题
如果我们在配置文件中直接输入数据库密码,很容易导致密码泄露,
所以我们可以将密码配置到系统环境变量中,如下:
# 通过os.getenv(key)可以获取系统环境变量对应的value值: password = os.getenv('LUFFY_MySQL_PWD') print(password)
这样,就提高了我们数据库的安全性。
拓展
我们可以安装mysqlclient,但是要看运气
# 使用python 3.x上另一个操作数据库的模块mysqlclient, pip install mysqlclient # 安装:win看人品,linux有不同的解决方案 # 解决方案一:win的操作系统缺东西(集成库) -https://zhuanlan.zhihu.com/p/102535551 # 解决方案二:使用whl文件安装 -https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient -下载下来以后 -pip install 路径+文件