按照平常的使用习惯的,主程序,配置文件,数据模块都是拆分开。

from config import app


@app.route("/")
def hello_world():
    return "hello flask!"


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5001, debug=True)
配置文件(config.py)
 from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 主机IP地址
HOSTNAME = "127.0.0.1"
# MySql的监听端口号,默认3306
PORT = 3306
# 用户名,密码,自己设置的
USERNAME = "root"
PASSWORD = "root"
# MySql上创建的数据库名称.
DATABASE = "database_learn"


app.config['SQLALCHEMY_DATABASE_URI'] = \
    f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"


# 在app.config中设置好连接数据库信息.
# 然后使用SQLAlchemy(app)创建db对象,SQLAlchemy就会自动读取app.config中设置的连接信息.
# 读取的就是上面这个设置的地方app.config['SQLALCHEMY_DATABASE_URI']
db = SQLAlchemy(app)

# 测试连接是否成功!
# 涉及到Flask上下文的问题,所以需要加上with app.app_context().
# with app.app_context():
#     with db.engine.connect() as conn:
#         # 注意这里需要加上text(),不然会报错
#         # sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: 'select 1 from dual'
#         # 需要导入from sqlalchemy import text
#         ret = conn.execute(text("select 1 from dual"))
#         # 正常的话的应该返回(1,)
#         print(ret.fetchone())
数据模块(model)
 from config import db


# 继承db.Model固定写法.
class User(db.Model):
    # 这里table和tablename还是要区分清楚的.不然会报错
    # "AttributeError: 'str' object has no attribute 'c'"
    # 可以使用tablename
    # __table__ = "users"
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(140), nullable=False)
    password = db.Column(db.String(128))

    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password
创建表(createdb.py)
 import flask_bcrypt
import config
from model import User


# # 涉及到Flask上下文的问题,所以需要加上with app.app_context().
with config.app.app_context():
    config.db.create_all()
    password = flask_bcrypt.generate_password_hash("88888888")
    tina = User(name="Tina", email="714514386@qq.com", password=password)

    config.db.session.add(tina)
    # 插入数据需要提交
    config.db.session.commit()

目前根据ORM创建数据库和表需要单独执行 createdb.py的,表的创建一次就行了。

PyCharm下这里单独执行一下即可

执行完成以后,就会有响应的表和数据

posted on 2024-03-22 11:36  子线  阅读(43)  评论(0)    收藏  举报