python3的flask工程数据库从SQLite迁移到MySQL

SQLite数据量比较小的时候确实蛮不错的,不过网站的话MySQL还是比较好。SQLAlchemy 数据库引擎能保证工程可以快速切换数据库源。 只要切换一下数据库链接就能完成切换,狗书上如是说。

既然说那么简单,开始动工切换数据库之旅!

环境:

debian 7.5 (x86)

python 3.5

实例工程是OReilly出版的《flask web 开发:基于Python的Web应用开发实战》。书中的环境是应该是以python2为基础的,python3也能正常使用。

工程获取:https://github.com/miguelgrinberg/flasky

按照书中的描述只要把数据库链接替换。

一、替换数据库链接

FLask-SQLAlchemy数据库URL

看上去确实简单。只要把URL改成MySQL的就OK了,实际Python3会有些问题。要使用表中pymysql的连接样式。

二、安装部署MySQL

安装数据库

数据库直接使用系统提供的系统提供的版本(5.5)。

安装过程中会让你输入root密码,一路向下。

完成后可以使用 查看安装的版本信息。如下面的。

创建数据库

创建一个新的数据库,用来保存站点数据。

命令说明:

1、使用root用户打开数据库

2、创建一个icalc数据库,并使用utf8作为数据库的字符集。

3、创建一个moguf用户,密码:moguf,分配所有icalc数据库操作权限

4、提交所有修改

5、查看所有数据库名称(应该有建的icalc数据库)

这里须要注意一点,数据库要使用utf8字符集。否则呵呵~~你中文就会变成????

注意:数据库字符集使用utf8

如果创建时没带参数可以使用命令修改数据库字符集

修改后查看字符集设置

歪歪一下授权语法,方便参考

简易记忆:

grant

权限on应用范围(数据库表,方法等)to'用户名'@'主机名'identified by密码

require要求with对用户的进行的执行sql的条数控制。

最后 require 和 with 可以细节空值

样例:

修改root密码

如果安装的时候没设置密码。如在mac中使用dmg安装时没有设置过密码。新建数据库可能会提示权限问题。可以修改root的密码后使用root重新登录。

用SET PASSWORD命令

然后用设置的密码重新登录mysql,创建数据库

测试数据库

使用新建的用户连接

使用新用户对新数据库,进行简答操作OK。环境OK下面就是正题。

三、安装python3的MySQL包PyMySQL

提示:

国内pip的数据源安装比较慢,可以用国内镜像。加参数 使用豆瓣的源

《Debian安装 python 3.5.1》有pip源配置的说明

安装python mysql包时会出现错误,无法正确安装。会出现下面的情况。

查资料才发现python3不支持mysql-python的包。ConfigParser这个包已经改成了configparser小写字母的。

PyMySQL 替代 MySQL-python

PyMySQL支持python3,可以进行替代。

安装成功!!

四、修改配置

打开config.py 把开发的链接修改成MySQL链接。

URL:mysql+pymysql://moguf:moguf@localhost/icalc?charset=utf8

使用部署命令生成数据库

没报错,恭喜离成功一步之遥!

相关问题

如果使用狗书上的链接方式会出现无法加载MySQLdb的模块包

会出现下面的问题,是应为使用PyMySQL代替了没有MySQLdb这个包。

五、运行站点测试

启动站点

在本地访问你的服务器,可以在浏览器上看到网站内容。

恭喜成功了!

六、相关参考

实际SQLAlchemy支持很多MySQL的引擎,不仅仅只有PyMySQL,具体可以参考在线帮助。

在线帮助:SQLAlchemy 1.0 Documentationhttp://docs.sqlalchemy.org/en/rel_1_0/dialects/mysql.html#dialect-mysql

实际的部署看下面帖子的方案

部署贴:《Debian下使用Nginx+uWSGI部署Flask应用》把里面sqlite的替换成MySQL就可以了。

安装python3看《Debian安装 python 3.5.1》帖子

总结:

1、数据库字符集一定要改成 UTF8,否则会出现乱码

2、Python3下MySQL-Python不支持须要使用其它数据库API

弄明白了切换数据库确实很简单的,就是很多网上的帖子没提示是Python2还是Python3,容易误导。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181008A0H6PQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券