flask学习之flask-SQLALchemy

燕承安
2023-12-01

flask-SQLALchemy是对SQLAL车门有进行了一个简单的封装,使得我们在flask中使用sqlalchemy更加的简单,数据库的初始化不再是通过create_engine,而是通过db
db的操作更简单,但是并没有相关的自动填充,这点比较费事
通过代码解析:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

引入的内容相对较少,
初始参数定义:
参数定义的内容与上文的内容是一样的:

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flaskdatabase'
USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

app创建

app = Flask(__name__)
# 映射数据库
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)  # db为继承了SQLALchemy

定义模型类:(可以不自行创建表格,默认将类名小写化生成表格)
以下文为例,可以不写tablename 会自动将类名小写,生成user,而且,如果在tablename中定义其他的非user的名字,也会报错

class User(db.Model):
    # __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(50))

    # def __str__(self):
    #     return 'User(name:%s)' %self.name

    def __repr__(self):
        return 'User(name:%s)' % self.name

class Article(db.Model):
    # __tablename__ = 'article'
    #__tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50))
    uid = db.Column(db.Integer,db.ForeignKey('user.id'))
    author = db.relationship('User',backref='articles')

# db.drop_all()
# 这一行不能要,在新建之后再进行删除的话,在通过sqlyog刷新数据库的时候,会一直不显示数据,是要出问题的
# 对于使用sqlalchemy的drop_all的程序这样操作没问题,因为那时程序已经执行完成,不再调用这个数据库,查看是可以的
db.create_all()

#添加数据
user= User(name='cheney')
article = Article(title='python')
article.author = user
db.session.add(article)
db.session.add(user)
db.session.commit()

# 查询数据
user = User.query.all()
print(user)

或者:

user = db.session.query(User).all()
print(user)
@app.route('/')
def index():
    return '这是首页'

if __name__ == '__main__':
    app.run(debug=True)
  • 注:# db.drop_all()
    这一行不能要,在新建之后再进行删除的话,在通过sqlyog刷新数据库的时候,会一直不显示数据,是要出问题的
    对于使用sqlalchemy的drop_all的程序这样操作没问题,因为那时程序已经执行完成,不再调用这个数据库,查看是可以的
    这个问题困扰了我一个晚上,终于解决
 类似资料: