1. 云栖社区>
  2. PHP教程>
  3. 正文

Flask连MySQL数据库

作者:用户 来源:互联网 时间:2017-12-01 10:12:29

数据库

Flask连MySQL数据库 - 摘要: 本文讲的是Flask连MySQL数据库, Flask连MySQL数据库,有需要的朋友可以参考下。 先废话几句,今天才发现原来SQLAlchemy不是数据库,只是一个关系型数据库框架,用来管理数据库的,支持MySQL/Postgres和SQLite,flask教程中用的就是SQLi

Flask连MySQL数据库,有需要的朋友可以参考下。


先废话几句,今天才发现原来SQLAlchemy不是数据库,只是一个关系型数据库框架,用来管理数据库的,支持MySQL/Postgres和SQLite,flask教程中用的就是SQLite数据库。
那么问题来了,连接MySQL后,python脚本中的创建数据库表的语句还是否有用。没法用的话要如何修改使之能用。
以及models文件中定义的插入数据的语句是否still work。行动起来,自己去发现答案。

0、CentOS下安装MySQLdb
终端输入: # yum install MySQL-python
等待安装完成

1、编写测试脚本 hello.py

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():    return 'Hello World!'if __name__ == '__main__':    app.run(debug=True)

终端输入python hello.py,然后访问127.0.0.1:5000,可以正常输出‘Hello World!’,代表测试成功,Flask成功连接了MySQL。

3、修改代码将MySQL应用到博客网站上
将config.py 脚本中跟sqlite相关的地址全部改成mysql的服务器相关内容:

class DevelopmentConfig(Config):    DEBUG = True    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or /'mysql://root:[email protected]/data_dev'class TestingConfig(Config):    TESTING = True    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or /'mysql://root:[email protected]/data_test'    WTF_CSRF_ENABLED = Falseclass ProductionConfig(Config):    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or /'mysql://root:[email protected]/data_prod'

这样以后输入python manage.py runserver就可以跑起来了,不过页面提示data_dev中没有posts等tables。于是用python manage.py shell命令,输入db查看一下数据库的路径,显示的是,说明mysql数据库可以连上了,但是表还没有建。再输入db.create_all(),建数据库的表运行一会儿,说明之前的脚本中建表的代码还是可以用的,这应该归功于SQLAlchemy。退出shell,再python manage.py runserver跑起来,页面可以正常显示了,只是页面没有了之前用SQLite的那些数据,说明直接修改config.py文件中的数据库路径就可以切换数据库,不用修改其他的设置。(查Flask-MySQL的文档里还有几行初始化的代码,不知道为什么这里不用配置初始化)
试着注册了一个账号,可以正常收到确认邮件,验证后可以登录成功。然而没有显示发表博客的输入框。。。
这应该是用户权限的问题,查查MySQL如何修改数据库里已经存在的数据,修改一下权限,可以把这里的使用问题解决。

重要的是,代码中如何配置让其默认权限为User。
问题是之前没有在roles表中创建数据,导致新注册的用户permissions栏为NULL。在shell中执行一下Role.insert_roles()即可。这时再注册新用户permissions栏会默认分配User的权限。

到此,Flask本地连MySQL大功告成。
总结:
1. 开启了MySQL服务后,直接修改config.py脚本中的数据库地址设置就可以切换数据库。不过还要在shell中执行一下建表语句才会创建表。
2. SQLAlchemy数据库框架集成了SQL语句的命令,就目前的测试情况看,脚本语句对SQLite和MySQL是通用的。

后续:如何在heroku上将博客的数据库配置为MySQL。

2015年8月27日22:37:26 续
将heroku上的app清理一下,打算新建一个用mysql数据库的flask博客,正好能熟悉一遍部署流程。
实现查看了一下heroku上的数据库addons,里面找到个叫ClearDB MySQL的,就是用它了,最低级的功能是免费的。然而在用heroku addons:create cleardb:ignite创建数据库时,提示我要绑定信用卡验证账户来使用这个插件,于是拿出我的招行信用卡吭哧吭哧填上,告诉我cannot be created,将填写内容都改成英文又告诉我是fraud,没辙了。度娘了一番发现知乎上有个人问这个问题的,下面有人回答说“如果这网站对信用卡完全进行数据库比对效验发卡行,那大陆的信用卡估计全军覆没……”看来是没戏了,果断放弃。
flask连mysql数据库就停留在本地了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库 ,以便于您获取更多的相关知识。