flask_sqlalchemy 使用详解

      之前我们讲了许多关于sqlalchemy的文章,今天就为大家讲讲flask_sqlalchemy的使用!在使用flask_sqlalchemy之前,请确保安装了flask_sqlalchemy,安装代码:

pip install flask_sqlalchemy
  flask_sqlalchemy用法与sqlalchemy类似,两者主要区别是sqlalchemy独立于flask使用。
  

  首先,我们先创建一个flask项目,并命名为 flask_sqlalchemy_demo


      创建完flask项目后,它会自动生成如下代码

from flask import Flask
  
app = Flask(__name__)
  
@app.route('/')
def hello_world():
  return 'Hello World!'
  
if __name__ == '__main__':
  app.run()

    接着,我们从flask_sqlalchemy中导入SQLAlchemy并实例化,代码如下(注意:导入的SQLAlchemy跟我们之前讲的sqlalchemy不一样,我们现在导入的SQLAlchemy是一个类,之前所讲的sqlalchemy是一个包)

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

     实力化db对象后,我们再创建一个User模型,在创建User模型前,我们要先做好数据库相关配置,不然flask项目怎么与数据库相连?是吧!我们就先做好数据库配置,代码如下:

DIALCT = "mysql"
DRIVER = "pymysql"
USERNAME = "root"
PASSWORD = "admin"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "flask_sqlalchmy_demo"
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI

     数据库连接和sqlalchemy连接数据库代码一样,定义好数据库连接后,我们就可以定义模型了(注意:模型继承的类是db.Model,而不是Base,数据类型及列属性不用从sqlalchemy导入,直接从db导入即可),代码如下:

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

     创建模型后,我们让它映射到数据库中,之前我们用sqlalchemy是Base.create_all(),现在我们用flask_sqlalchemy,其代码如下:

db.create_all()

     运行创建数据库代码,然后 show tables查看是否映射到数据库中。运行代码截图如下:


     OK,数据表已成功映射到数据库中,下面我们再讲讲flask_sqlalchemy简单增删查改操作,因为我之前讲过关于sqlalchemy数据操作的文章《使用sqlalchemy对数据库表进行增删查改操作》!

    添加数据

user1 = User(name = "jack")
user2 = User(name = "bob")
db.session.add_all([user1,user2])
db.session.commit()

    结果如下:


    查询数据

results = User.query.all()
print(results)

    结果如下


    修改数据(将name为jack修改成blue)

result = User.query.filter(User.name == "jack").first()
result.name = "blue"
db.session.commit()

   结果如下


删除数据(将name为bob的数据删除)

result = User.query.filter(User.name == "bob").first()
db.session.delete(result)
db.session.commit()

   结果如下



猜你喜欢

转载自blog.csdn.net/aimill/article/details/80858506