Flask是一个Python Web开发框架。
Mysql是全球广受欢迎的开源数据库。
目标是通过访问一个URL:
http://127.0.0.1:5000/week_price
能够获取到相应的数据:
[{"coin_name": "ADA"}, {"coin_name": "AION"}, {"coin_name": "ARDR"}, {"coin_name": "ARK"}, {"coin_name": "BCH"}, {"coin_name": "BNT"}, {"coin_name": "BTC"}, {"coin_name": "CNX"}, {"coin_name": "DASH"}, {"coin_name": "DCN"}]
Mysql与数据表是提前准备好的。
需要的数据只需一条sql语句就能从数据库中拿到。
SELECT coin_name FROM week_price LIMIT 10
所以,接下来需要做的事情,就是创建Flask项目与编写相关的代码。
下文中使用的IDE是Pycharm.
创建Flask项目
在pycharm 中新建Flask项目。
python版本管理使用的virtualenv.
安装MySQLdb
需要使用python操作mysql数据库,所以需要安装MySQLdb,它将一些对于数据库的基本操作封装成对象和方法,方便调用。
切换到虚拟的python 环境中。
打开终端输入下面的命令。
$ which python
/Users/ourtrip/anaconda2/bin/python
$ cd /Users/ourtrip/Documents/baa/bglass_server_v0.2/
$ source venv/bin/activate
$ which python
/Users/ourtrip/Documents/baa/bglass_server_v0.2/venv/bin/python
安装MySQL-python。
在MySQL-python · PyPI中找到下载url:使用curl将文件下载下来。
$ cd ..
$ curl -O https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip
$ unzip MySQL-python-1.2.5.zip
打开解压后MySQL-python-1.2.5文件夹,编辑site.cfg中的mysql_config。
下面是非常关键的步骤,我之前是因为没有更改mysql_config的路径,导致浪费四五个小时的时间,用来找原因。
$ cd MySQL-python-1.2.5
$ which mysql
/usr/local/mysql/bin/mysql
$ vim site.cfg
from
#mysql_config = /usr/local/bin/mysql_config
to
mysql_config = /usr/local/mysql/bin/mysql_config
使用wq保存退出。
编译安装MySQL-python-1.2.5
$ python setup.py clean
$ python setup.py build
$ sudo python setup.py install
MySQL-python安装是否成功?
$ python
>>> import MySQLdb
到此,MySQL-python也顺利安装成功,实际操作时,会遇到许多意想不到的问题,我自己的实际经历就是这样,我将解决问题的过程详细记录在文末,感兴趣的跳跃查看。
编写代码
接下来就是使用MySQL-python提供的方法,获取mysql存储的数据。
from flask import Flask
import json
import MySQLdb
app = Flask(__name__)
_db = MySQLdb.connect("localhost", "root", "12345678", "Lemoying", charset='utf8')
_cursor = None
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/week_price')
def week_price():
sql = '''SELECT coin_name FROM week_price LIMIT 10'''
_cursor = _db.cursor()
try:
_cursor.execute(sql)
row_headers = [x[0] for x in _cursor.description]
results = _cursor.fetchall()
print(row_headers)
json_data = []
for result in results:
json_data.append(dict(zip(row_headers, result)))
print(json_data)
# _db.commit()
except:
_db.rollback()
_cursor.close()
return json.dumps(json_data)
if __name__ == '__main__':
app.run()
运行项目
在浏览器中输入http://127.0.0.1:5000/week_price,就可以查看到数据库中查询的结果。
"coin_name": "ADA"}, {"coin_name": "AION"}, {"coin_name": "ARDR"}, {"coin_name": "ARK"}, {"coin_name": "BCH"}, {"coin_name": "BNT"}, {"coin_name": "BTC"}, {"coin_name": "CNX"}, {"coin_name": "DASH"}, {"coin_name": "DCN"}]
回顾
整个过程比较耽误时间的是安装 MySQL-python,耽误时间的原因是使用pip install MySQL-python会报错误,报出的错误找不到解决的方法,只能改变方向,下载安装包采用手动安装的方式。
在手动安装的过程中,因为没有更改MySQL-python-1.2.5中site.cfg中关于mysql_config的配置,而系统中安装的mysql已经不是默认的路径。
site.cfg中mysql_config是/usr/local/bin/mysql_config
,使用which mysql
命令查看到mysql 的安装路径是/usr/local/mysql/bin/mysql
。
/usr/local/bin/mysql_config
/usr/local/mysql/bin/mysql/mysql_config
这是导致使用python set.up build 命令一直失败的原因。
到此,用Flask + Mysql + Virtualenv 完成了一个Api的编写。
至于如何这些数据展示出来,是后面需要做的事情。