您的位置:首页 > 数据库 > MySQL

Flask连MySQL数据库

2015-08-27 22:48 483 查看
先废话几句,今天才发现原来SQLAlchemy不是数据库,只是一个关系型数据库框架,用来管理数据库的,支持MySQL/Postgres和SQLite,flask教程中用的就是SQLite数据库。

那么问题来了,连接MySQL后,python脚本中的创建数据库表的语句还是否有用?没法用的话要如何修改使之能用?

以及models文件中定义的插入数据的语句是否still work?行动起来,自己去发现答案。

0、CentOS下安装python的MySQLdb驱动

终端输入: #
yum install MySQL-python


等待安装完成

1、编写测试脚本 hello.py

from flask import Flask
app = 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:123@localhost/data_dev'

class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
'mysql://root:123@localhost/data_test'
WTF_CSRF_ENABLED = False

class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'mysql://root:123@localhost/data_prod'


这样以后输入python manage.py runserver就可以跑起来了。

不过页面提示data_dev中没有posts等tables。于是用python manage.py shell命令,输入db查看一下数据库的路径,显示的是
<SQLAlchemy engine='mysql://root:123@localhost/data_dev'>
,说明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数据库的想法就停留在本地了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: