并使用Flask开发API接口对外提供数据访问。
1、查看 python 的版本
python -VPython 2.7.12 :: Anaconda 4.1.1 (64-bit)
2、安装驱动 MySQL-python,下载 python 的对应版本
https://pypi.python.org/pypi/MySQL-python/
3、检查MySQLdb模块是否可以正常导入
python
import MySQLdb
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
结论:驱动版本与python不对应,必须是32位对应32位,64位对应64位。
重新下载非安装版本:MySQL-python-1.2.5.zip
解压,进入MySQL-python-1.2.5目录:
python setup.py install
报错:error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat).
继续下载:Microsoft Visual C++ Compiler for Python 2.7
http://www.microsoft.com/en-us/download/details.aspx?id=44266
安装这个编译器后,继续安装:
python setup.py install
继续报错:
_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
原因:关联MySQL Connector的相关版本不一致造成的。
郁闷,为啥还需要MySQL Connector?
太折腾,搜索了一下,非官网上,有64位的MySQL-python下载:
http://www.codegood.com/archives/129
安装后,再测试:
python
import MySQLdb
ok了!
同事建议使用conda来管理Python开发环境 ,介绍如下:
Anaconda 提供一个管理工具 conda ,可以把 conda 看作是 pip + virtualenv + PVM (Python Version Manager) + 一些必要的底层库,也就是一个更完整也更大的集成管理工具。如果只想用 conda ,可以下载简化版的 Miniconda(https://conda.io/docs/install/quick.html#linux-miniconda-install) ,需要 Anaconda 可以安装完全版,一共大概400M,用阿里云服务器从官方网站下载大概要6个小时,不过还好清华大学TUNA镜像源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/
4、安装Flask
pip install flask
安装后,再测试:
python
import flask
ok了!
5、代码
sql.py
# -*- coding: UTF-8 -*-
'''
封装类
'''
import MySQLdb
class MyTest(object):
'''
MyTest
'''
def __init__(self, HOST, USER, PASSWD, DB, PORT):self.conn = MySQLdb.connect(
host=HOST, user=USER, passwd=PASSWD, db=DB, port=PORT)
self.cur = self.conn.cursor()
def getdata(self, sql):
'''
getdata
'''
result = None
try:
count = self.cur.execute(sql)
info = self.cur.fetchmany(count)
result = []
for row in info:
result.append(row)
return result
except MySQLdb.Error, e:
return "Error:%s" % str(e)
finally:
# 能够改变变量作用域的代码段是 def、class、lamda
if self.cur:
self.cur.close()
self.conn.commit()
self.conn.close()
app.py
# coding:utf-8
'''
在Windows下用Python访问MySQL数据库,并使用Flask开发API接口对外提供数据访问
'''
from sql import MyTest
from flask import Flask, jsonify
APP = Flask(__name__)
@APP.route('/test')
def test():
'''
路由测试
'''
host, user, passwd = '127.0.0.1', '****', '*****'
dbname, port = 'dbdemo', 800
instance = MyTest(host, user, passwd, dbname, port)
result = instance.getdata("select * from mytb limit 0,10")
if result is not None:
return jsonify(result)
else:
return "no data"
if __name__ == "__main__":
APP.run(host='0.0.0.0', port=7777, debug=True)
测试 http://127.0.0.1:7777/test
OK!