python flask 使用mysql数据库
今天我把自己搭建并使用flask+mysql的过程总结一下,自己也温习一下,顺便也将一些碰到的坑记录下来,给其他朋友做个参考。
1、安装mysql数据库
mysql数据库就不介绍了,比较流行的关系型数据库,之前我都是用单位的oracle11g, 这次我选择从头开始找一款开源免费的。我的服务器是ubuntu 16.04系统的,安装起来相当方便
apt-get install mysql-server mysql-client libmysqlclient-dev
安装过程中会让你输入root账号的密码。
检查是否安装成功
netstat -tap | grep mysql
出现listen xxxx/mysqld 则表示监听成功,mysql默认监听3306端口
2、数据库远程访问配置
登录mysql数据库
mysql -u root -p #之后提示输入密码
创建数据库
mysql>create database myfirstsqldb;
创建用户并控制该数据库 同时赋予了它远程控制该数据库的权限
mysql> grant all on myfirstsqldb.* to 'newuser' identified by 'newpsw';
既有用户root
mysql>update user set host='%' where user='root' and host='localhost';
切换到该数据库
mysql> use myfirstsqldb
查看mysql占用端口
mysql >show global variables like 'port';
创建表
mysql >CREATE TABLE users(id INT, user_name VARCHAR(64),role_id INT);
退出
mysql >quit;
修改配置文件
nano /etc/mysql/mysql.conf.d/mysqld.cnf
将
bind-address= 127.0.0.1前面的加上#号
带着表示
listen only on localhost which is more compatible and is not less secure.
重启mysql
service mysqld restart
有的版本采用的 service mysql restart
systemctl restart mysql.service
最容易忽视但最重要的一点就是你的防火墙运行3306端口出入
我用的阿里云服务器有一个安全组设置,要将3306端口加入到入方向中。
3、连接mysql,并使用Flask_sqlalchemy简单操作
我们先上代码,然后再详细解释
第1,2行就不细说了,导入相应对象,flask_sqlalchemy 一个Flask插件,将面对对象得方法映射到数据库中的关系对象中,能够让我们以操作对象的方式来操作数据库,自动帮你生成原生的sql 语句。
这些安装均可以用pip install来安装
4-7 是程序的初始化以及配置,Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,加密用的。,第6行是连接mysql数据库的固定格式,pymysql为指定的驱动,mysqldb目前不支持python3。第7行的值如果设为True 表示每次请求结束后都会自动提交数据库的变动,但像add delete insert等仍需要commit
10-17 User类是建立数据库中users表但模型类,__repr__返回的是对object的描述
21行是进行查询,以列表形式返回结果。
22行传入starter这个模版页中
其他常用查询可以查询官网www.pythondoc.com/flask-sqlalchemy/api.html#flask.ext.sqlalchemy.SQLAlchemy
抽时间我会详细研究一些这个插件的。😄
先记住几个常用的api:
db.create_all() #创建表 如果数据库表已经存在于数据库中,那么db.create_all()不会重新创建或者更新这个表。
db.drop_all() #删除表
#插入/删除/更新
user_haha= User(username='haha', role_id=1)
db.session.add(user_haha)
db.session.commit()
db.session.delete(some_role)
db.session.commit()
user_haha.username='newhaha'
db.session.add(user_haha)
db.session.commit()
补充
最近在访问mysql的时候,发现中文出现错误,多方查证后,是由于在创建database的时候使用的编码格式不支持中文。
所以
在安装完mysql后,先不着急创建数据库,需经历一下2步
1、nano /etc/mysql/my.cnf
加入
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
保存
2、#重启数据服务
service mysql restart
OK 之后创建的数据库和表格就会使用utf-8了
重启后查看编码
show variables like '%char%';
show create database yourdatabase
总结
喜欢用原生sql的可以直接使用pymysql,感觉两者各有优缺点吧。