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 Documentation http://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,容易误导。
- 发表于:
- 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据 《腾讯内容开放平台服务协议》 转载发布内容。
- 如有侵权,请联系 cloudcommunity@tencent.com 删除。