{"id":23148851,"url":"https://github.com/houxiaozhao/python3-flask-mysql","last_synced_at":"2025-08-17T17:34:15.681Z","repository":{"id":52650896,"uuid":"146063006","full_name":"houxiaozhao/python3-flask-mysql","owner":"houxiaozhao","description":"python3 flask 使用Mysql数据库","archived":false,"fork":false,"pushed_at":"2023-05-01T21:37:13.000Z","size":14,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-05-12T12:28:38.960Z","etag":null,"topics":["flask","mysql","python","python3-flask-mysql","restapi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/houxiaozhao.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-25T03:55:20.000Z","updated_at":"2022-02-04T05:36:03.000Z","dependencies_parsed_at":"2022-08-22T02:01:20.550Z","dependency_job_id":null,"html_url":"https://github.com/houxiaozhao/python3-flask-mysql","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houxiaozhao%2Fpython3-flask-mysql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houxiaozhao%2Fpython3-flask-mysql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houxiaozhao%2Fpython3-flask-mysql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houxiaozhao%2Fpython3-flask-mysql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/houxiaozhao","download_url":"https://codeload.github.com/houxiaozhao/python3-flask-mysql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230151960,"owners_count":18181328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","mysql","python","python3-flask-mysql","restapi"],"created_at":"2024-12-17T17:13:19.878Z","updated_at":"2024-12-17T17:13:20.361Z","avatar_url":"https://github.com/houxiaozhao.png","language":"Python","readme":"# 运行\n\n1. ```pip install -r Requirements```\n2. 创建mysql数据库 hhh\n3. 进入python shell\n    ```python\n    db.create_all()# 自动根据模型创建数据库表\n    ```\n4. ```python app.py```\n\n# python3 flask 使用Mysql数据库\n\n1. 创建flask基本项目结构\n\n    ```python\n    from flask import Flask\n    app = Flask(__name__)\n    ```\n\n2. 安装`flask-sqlalchemy`\n    ```commandline\n    pip install flask-sqlalchemy\n    ```\n\n3. 导入配置\n    ```python\n    from flask_sqlalchemy import SQLAlchemy\n     \n    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost/hhh'\n    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True\n    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True\n    db = SQLAlchemy(app)\n    ```\n   python3 不再支持MySQKdb,连接mysql数据库需要使用pymysql\n\n   安装pymysql\n\n   `pip install pymysql`\n\n4. 定义表模型\n    ```python\n    class User(db.Model):\n        id = db.Column(db.Integer, primary_key=True)\n        username = db.Column(db.String(64), unique=True, nullable=True)\n    \n        def __init__(self, username):\n            self.username = username\n    \n        def __repr__(self):\n            return '\u003cUser {}\u003e'.format(self.username)\n    ```\n\n5. 创建表 在python shell中\n\n   ```commandline\n    \u003e\u003e\u003e from app import db\n    \u003e\u003e\u003e db.create_all()\n   ```\n\n6. 添加数据 在python shell中\n   ```commandline\n    \u003e\u003e\u003e from app import db\n    \u003e\u003e\u003e from app import User\n    \u003e\u003e\u003e user=User('hou')\n    \u003e\u003e\u003e db.session.add(user)\n    \u003e\u003e\u003e db.session.commit()\n   ```\n\n7. 查询数据库\n\n   ```bash\n    \u003e\u003e\u003e User.query.all()\n    [\u003cUser hou\u003e]\n    \u003e\u003e\u003e User.query.filter_by(username='hou').first()\n    \u003cUser hou\u003e\n   ```\n\n8. 一对多或一对一表关联\n\n    - 定义Post 表模型\n\n      ```python\n      from datetime import datetime\n      class Post(db.Model):\n          id = db.Column(db.Integer, primary_key=True)\n          body = db.Column(db.Text)\n          timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)\n          # 添加外键声明\n          user_id = db.Column(db.Integer, db.ForeignKey('user.id'))\n          def __repr__(self):\n              return '\u003cPost {}\u003e'.format(self.body)\n      ```\n\n    - User添加关系\n\n      ```python\n      class User(db.Model):\n          id = db.Column(db.Integer, primary_key=True)\n          username = db.Column(db.String(64), unique=True, nullable=True)\n          # 新加的\n          # 如果您想要一对一关系，您可以把 uselist=False 传给 relationship() 。\n          posts = db.relationship('Post', backref='user', lazy='dynamic')\n          def __init__(self, username):\n              self.username = username\n          def __repr__(self):\n              return '\u003cUser {}\u003e'.format(self.username)\n      ```\n\n    - 执行创建表\n\n    - 添加数据\n\n      ```bash\n      \u003e\u003e\u003e from app import *\n      \u003e\u003e\u003e user=User.query.filter_by(username='hou').first()\n      \u003e\u003e\u003e post1=Post(body='post1post1post1post1post1post1',user=user)\n      \u003e\u003e\u003e db.session.add(post1)\n      \u003e\u003e\u003e db.session.commit()\n      ```\n\n    - 查询数据\n\n      ```bash\n      \u003e\u003e\u003e user=User.query.filter_by(username='hou').first()\n      \u003e\u003e\u003e user.posts.all()\n      [\u003cPost 哈哈哈哈哈\u003e, \u003cPost post1post1post1post1post1post1\u003e]\n      \u003e\u003e\u003e user.posts.filter_by(id=4).first()\n      \u003cPost post1post1post1post1post1post1\u003e\n      ```\n\n9. 多对多表关联\n\n    - 定义Category 表模型\n\n      ```python\n      class Category(db.Model):\n          id = db.Column(db.Integer, primary_key=True)\n          name = db.Column(db.String(50))\n          def __init__(self, name):\n              self.name = name\n          def __repr__(self):\n              return '\u003cCategory %r\u003e' % self.name\n      ```\n\n    - 定义关联表\n\n      ```python\n      categorys = db.Table('categorys',\n                           db.Column('id', db.Integer, primary_key=True),\n                           db.Column('post_id', db.Integer, db.ForeignKey('post.id')),\n                           db.Column('category_id', db.Integer, db.ForeignKey('category.id'))\n                           )\n      ```\n\n    - Post 中添加关系\n\n      ```python\n       categorys = db.relationship('Category', secondary=categorys, backref=db.backref('posts', lazy='dynamic'))\n      ```\n\n    - 执行创建表\n\n    - 准备类别数据\n\n      ```bash\n      \u003e\u003e\u003e from app import *\n      \u003e\u003e\u003e category1=Category(name=\"前端\")\n      \u003e\u003e\u003e category2=Category(name=\"nodejs\")\n      \u003e\u003e\u003e category3=Category(name=\"python\")\n      \u003e\u003e\u003e db.session.add(category1)\n      \u003e\u003e\u003e db.session.add(category2)\n      \u003e\u003e\u003e db.session.add(category3)\n      \u003e\u003e\u003e db.session.commit()\n      ```\n\n    - 添加post\n\n      ```bash\n      \u003e\u003e\u003e from app import *\n      \u003e\u003e\u003e category1=Category.query.get(1)\n      \u003e\u003e\u003e category2=Category.query.get(2)\n      \u003e\u003e\u003e category3=Category.query.get(3)\n      \u003e\u003e\u003e user=User.query.get(1)\n      \u003e\u003e\u003e post1=Post(body='关联的post',user=user,categorys=[category1])\n      \u003e\u003e\u003e post2=Post(body='关联的post',user=user,categorys=[category1,category2,category3])\n      \u003e\u003e\u003e db.session.add(post1)\n      \u003e\u003e\u003e db.session.add(post2)\n      \u003e\u003e\u003e db.session.commit()\n      ```\n\n10. 修改代码结构使其更好的提供接口\n\n![](http://obr4xf51d.bkt.clouddn.com/18-8-25/83459102.jpg)\n\n11. 提供简单rest接口`user` (有部分改动,以代码为准)\n\n    ```python\n    from flask import jsonify, request\n    from app.api import bp\n    \n    from app.models import User\n    from app import db\n    from app.error import bad_request\n    \n    \n    @bp.route('/users', methods=['GET'])\n    def get_users():\n        limit = min(request.args.get('limit', 10, int), 100)\n        offset = (request.args.get('page', 1, int) - 1) * request.args.get('limit', 10, int)\n        return jsonify([user.to_dict() for user in User.query.limit(limit).offset(offset).all()])\n    \n    \n    @bp.route('/users/\u003cint:id\u003e', methods=['GET'])\n    def get_user(id):\n        return jsonify(User.query.get_or_404(id).to_dict())\n    \n    \n    @bp.route('/users', methods=['POST'])\n    def add_user():\n        data = request.get_json() or {}\n        if 'username' not in data:\n            return bad_request('错误的参数')\n        user = User(username=data['username'])\n        db.session.add(user)\n        db.session.commit()\n        return jsonify(user.to_dict())\n    \n    \n    @bp.route('/users/\u003cint:id\u003e', methods=['PUT'])\n    def update_user(id):\n        user = User.query.get_or_404(id)\n        data = request.get_json() or {}\n        if 'username' not in data:\n            return bad_request('错误的参数')\n        setattr(user, 'username', data['username'])\n        db.session.commit()\n        return jsonify(user.to_dict())\n    \n    \n    @bp.route('/users/\u003cint:id\u003e', methods=['DELETE'])\n    def delete_user(id):\n        user = User.query.get_or_404(id)\n        db.session.delete(user)\n        db.session.commit()\n        return jsonify({'message': 'ok'})\n    \n    ```\n\n12. 源代码地址 https://github.com/houxiaozhao/python3-flask-mysql","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhouxiaozhao%2Fpython3-flask-mysql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhouxiaozhao%2Fpython3-flask-mysql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhouxiaozhao%2Fpython3-flask-mysql/lists"}