Mac使用Flask + Mysql 搭建API服务

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.

Mac使用Flask + Mysql 搭建API服务_第1张图片
Mac使用Flask + Mysql 搭建API服务_第2张图片

安装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的编写。

至于如何这些数据展示出来,是后面需要做的事情。

你可能感兴趣的:(Mac使用Flask + Mysql 搭建API服务)