Flask连MySQL数据库
2015-08-27 22:48
483 查看
先废话几句,今天才发现原来SQLAlchemy不是数据库,只是一个关系型数据库框架,用来管理数据库的,支持MySQL/Postgres和SQLite,flask教程中用的就是SQLite数据库。
那么问题来了,连接MySQL后,python脚本中的创建数据库表的语句还是否有用?没法用的话要如何修改使之能用?
以及models文件中定义的插入数据的语句是否still work?行动起来,自己去发现答案。
0、CentOS下安装python的MySQLdb驱动
终端输入: #
等待安装完成
1、编写测试脚本 hello.py
终端输入python hello.py,然后访问127.0.0.1:5000,可以正常输出‘Hello World!’,代表测试成功,Flask成功连接了MySQL。
3、修改代码将MySQL应用到博客网站上
将config.py 脚本中跟sqlite相关的地址全部改成mysql的服务器相关内容:
这样以后输入python manage.py runserver就可以跑起来了。
不过页面提示data_dev中没有posts等tables。于是用python manage.py shell命令,输入db查看一下数据库的路径,显示的是
退出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的,最低级的功能是免费的,就是用它了。
然而在用
度娘了一番发现知乎上有个人问这个问题的,下面有人回答说“如果这网站对信用卡完全进行数据库比对效验发卡行,那大陆的信用卡估计全军覆没……”看来是没戏了,果断放弃。
于是乎,Flask连MySQL数据库的想法就停留在本地了。
那么问题来了,连接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数据库的想法就停留在本地了。
相关文章推荐
- 一些mysql数据库性能优化方法
- 性能测试培训总结-loadrunner测试mysql
- mysql查询表中的所有字段
- C#连接MySQL数据库的封装类
- 有关 MySQL数据库常见的误解
- Space is not allowed after parameter prefix ':' MySQL异常
- debian安装mysql
- mysql中的数据导入与导出
- mysql查询结果添加序列号
- liunx环境下安装mysql数据库
- mysql中count函数使用方法详解
- MYSQL索引无效和索引有效的详细情况
- Mysql触发器
- jdbc连接mysql
- MySQL数据库自带备份与恢复工具:MySQLdump.exe与mysql.exe
- 定时同步sql server数据到mysql
- mysql 权限管理
- mysql检测重复索引
- mysqlmb4
- MySQL主从异步, 半同步配置