按照平常的使用习惯的,主程序,配置文件,数据模块都是拆分开。
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下这里单独执行一下即可

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

浙公网安备 33010602011771号