Flask-MySQLdb 项目教程
1. 项目的目录结构及介绍
Flask-MySQLdb 项目的目录结构如下:
flask-mysqldb/
├── flask_mysqldb/
│ ├── __init__.py
│ └── mysqldb.py
├── tests/
│ ├── __init__.py
│ └── test_mysqldb.py
├── .gitignore
├── LICENSE
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
目录结构介绍
flask_mysqldb/
: 核心模块目录,包含 Flask-MySQLdb 的主要实现文件。__init__.py
: 模块初始化文件。mysqldb.py
: MySQLdb 扩展的主要实现文件。
tests/
: 测试目录,包含项目的测试文件。__init__.py
: 测试模块初始化文件。test_mysqldb.py
: 针对 MySQLdb 扩展的测试文件。
.gitignore
: Git 忽略文件配置。LICENSE
: 项目许可证文件。README.md
: 项目说明文档。requirements.txt
: 项目依赖文件。setup.cfg
: 安装配置文件。setup.py
: 项目安装脚本。
2. 项目的启动文件介绍
Flask-MySQLdb 项目的启动文件主要是 flask_mysqldb/__init__.py
和 flask_mysqldb/mysqldb.py
。
flask_mysqldb/__init__.py
该文件主要负责初始化 Flask-MySQLdb 扩展,并提供必要的导入和配置。
from .mysqldb import MySQL
__all__ = ['MySQL']
flask_mysqldb/mysqldb.py
该文件包含了 MySQLdb 扩展的主要实现逻辑,包括连接数据库、执行查询等功能。
from flask import current_app, g
import MySQLdb
class MySQL(object):
def __init__(self, app=None):
if app is not None:
self.init_app(app)
def init_app(self, app):
app.config.setdefault('MYSQL_HOST', 'localhost')
app.config.setdefault('MYSQL_USER', None)
app.config.setdefault('MYSQL_PASSWORD', None)
app.config.setdefault('MYSQL_DB', None)
app.config.setdefault('MYSQL_CURSORCLASS', None)
app.teardown_appcontext(self.teardown)
def connect(self):
return MySQLdb.connect(
host=current_app.config['MYSQL_HOST'],
user=current_app.config['MYSQL_USER'],
passwd=current_app.config['MYSQL_PASSWORD'],
db=current_app.config['MYSQL_DB'],
cursorclass=current_app.config['MYSQL_CURSORCLASS']
)
def teardown(self, exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
3. 项目的配置文件介绍
Flask-MySQLdb 项目的配置文件主要是 setup.py
和 setup.cfg
。
setup.py
该文件是项目的安装脚本,定义了项目的元数据和依赖。
from setuptools import setup, find_packages
setup(
name='Flask-MySQLdb',
version='2.0.0',
url='https://github.com/alexferl/flask-mysqldb',
author='Alexandre Ferland',
author_email='aferlandqc@gmail.com',
description='MySQLdb extension for Flask',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
packages=find_packages(),
zip_safe=False,
include_package_data=True,
platforms='any',
install_requires=[
'Flask>=1.0.4',
'mysqlclient>=1.4.2'
],
classifiers=[
'Environment :: Web Environment',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',