前言
我是一名就读计算机科学与技术专业的大学三年级学生, 本学期学习安卓开发课程, 想尝试做一个类似“百词斩”的背单词软件, 但我不想仅在手机上模拟流程, 而是真正地使用服务器作为后端储存和处理数据。恰好我从一些学习的qq群里听说了阿里云的飞天加速计划,于是参与了学习与答题,免费领取了两周的云服务器。
经过一段时间的摸索,我大致完成了自己定的目标,经过亲身体验后,我确实感觉阿里云的云服务器服务质量非常不错。所以为社区发表一篇帖子记录一下我学习到的东西,并继续取得续领云服务器服务的资格。
攻略正文:从0开始在linux服务器上通过python脚本自动控制mysql数据库
声明
本篇博客仅论述实现功能的基本流程, 不详细讲解知识,数据库初学者建议先学习sql基本语法(时间成本不高)
环境安装
我使用的操作系统是Ubuntu20, 装好之后是自带python3, 所以我们直接无脑安装mysql
apt update
apt install mysql-server
非root账号输入, 当然要能获取root权限才行
sudo apt update
sudo apt install mysql-server
新建一个账号
这一步没什么用,只是我想新建一个
adduser --home /usr/sir sir
mysql登录
mysql数据库创建时会自动生成一串root用户密码,想改密码的可以去查查怎么改。使用root账号可以直接这样登录
mysql
非root账户用用户名密码登录, 输入下方语句后会提示你输入密码
mysql -u username -p
数据库基本操作
建增删改查等操作略,这里只放几个不全的栗子,不详细讲解,但下方的权限授予操作我认为是比较必要的
create table Person
(
PID nchar(15),
PName nchar(25),
PRole nchar(10),
Lucky int,
Ammo int
primary key(PID)
)
alter table Person add Ping int
alter table Person modify Lucky varchar(10)
alter table Person drop column Lucky
insert into Person values
(1234567,'EVO.T im a','Ellis',700,230),
(1234568,'EVO.Star','Smoker',0,225),
(1234569,'Double.Mayuyu','Coach',80,40),
(1234570,'dec.nv','Nick',0,233),
(1234571,'kain.nv','Charger',0,125);
select * from Person where PName = 'EVO%'
创建一个数据库用户,
@后跟一个ip, 表示允许哪些ip,或哪些子网段的ip访问, 若写%表示所有, localhost顾名思义是本地
identified by 后面写密码
create user 'testdbuser'@'localhost' identified by 'abcd';
给用户授权, 当然也可以新建角色给角色授权,然后再把角色权限授权给用户,
grant all privileges on table 好几个表 to testdbuser@localhost
python自动操作数据库
安装pymysql库
无脑安装
pip install mypysql
pymysql基本操作
import pymysql
首先创建对象和游标, 形如下方代码
参数database表示你要操作哪个数据库 ,用户名密码要正确,且用户要有访问权限才行
self.__connection = pymysql.connect(host = self.__host, user = self.__user, password = self.__password, database = self.__database) # 实例化对象
self.__cursor = self.__connection.cursor(cursor=pymysql.cursors.DictCursor) #游标
增删改查
注意除了查询操作外,其他操作(也就是会改变数据库内容的操作)需要最后使用commit()方法,否则无法成功真正在数据库中完成操作
查
sql = 'select count(*) cnt from User where uid = %s'
self.__cursor.execute(sql, (uid)) # 使用execute执行
cnt = self.__cursor.fetchone()['cnt'] # 使用fetchone() fetchmany() fetchall() 获取返回结果的一条、多条或全部
if cnt == 0: return '无该用户'
增
sql = 'insert into User values (%s, %s, %s, %s)'
self.__cursor.execute(sql, (cnt + 1, name, password, False))
self.__connection.commit() #操作设计数据库修改需要执行commit方法
其他的都差不多
根据使用经验,若传参为字符串自带引号,当然可以提前写好之后只execute(sql)
sql = 'insert into User values (%s, %s, %s, %s)' %(乱七八糟)
self.__cursor.execute(sql)
部署后端
自己写个类,把想要的功能封装进去,就可以挂在服务器上自动跑脚本了。比如我正在做的东西有以下具体过程:
接受前端发来的数据数据解密(使用AES CBC)
验证数据正确性和完整性
为自己写的数据库操作类创建一个对象,通过外来数据操作数据库
编辑和加密回馈数据
回馈前端
其他
等学期末东西做完了,我应该会再写一篇完整总结
收获总结
这段时间学习并使用云服务器,应该是我第一次与“后端”打交道,并且还是使用我不太熟悉的linux操作系统。这让我认识到了还有很多知识我一窍不通,令我跳出了自己的舒适区去学习和思考,并在新的领域掌握了一些技术。今后我希望可以继续使用阿里云的云服务器完成我的课程设计,甚至毕业设计,并利用云服务器实现一些新的功能,例如搭建个人博客、个人小程序服务器、qq机器人等。