首页 > 数据库技术 > 详细

第六章 Flask数据库(二)

时间:2019-12-01 17:02:49      阅读:77      评论:0      收藏:0      [点我收藏+]

Flask-SQLALchemy 

Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展。

它需要 SQLAlchemy 0.6 或更高的版本。它致力于简化在 Flask 中 SQLAlchemy 的 使用,提供了有用的默认值和额外的助手来更简单地完成日常任务。

我的conda源没有,我就直接pip3

技术分享图片

 技术分享图片

 

数据库连接:

1. 与sqlalchemy一样,定义好数据库连接字符串DB_URI。
2. 将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI这个键放到app.config中。示例代码:app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI.
3. 使用flask_sqlalchemy.SQLAlchemy类定义一个对象,并将app传入进去。示例代码:db = SQLAlchemy(app)。

创建ORM模型:

1. 与使用sqlalchemy一样,定义模型。现在不需要使用delarative_base来创建一个基类,而是使用db.Model来作为基类。
2. 在模型类中,Column、String、Integer以及relationship等,都不需要导入了,直接使用db下面相应的属性名就可以了。
3. 在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用如果不设置该属性,类名小写作表名,
并且如果这个模型的名字使用多个单词且是驼峰命名法,则多个单词之间使用下划线来进行连接。

将ORM模型映射到数据库:

1. db.drop_all()
2. db.create_all()

使用session:

session也不需要使用sessionmaker来创建了。直接使用db.session且操作方式与SQLAl相同

查询数据:

如果查找数据只是查找一个模型上的数据,可以直接通过模型.query的方式进行查找。query就跟之前的sqlalchemy中的query方法是一样用的。

 

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

HOSTNAME = 127.0.0.1
PORT = 3306
DATABASE = flask_sqlalchemy
USERNAME = root
PASSWORD = root

# dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8mb4".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

app.config[SQLALCHEMY_DATABASE_URI] = DB_URI
app.config[SQLALCHEMY_TRACK_MODIFICATIONS] = False

db = SQLAlchemy(app)

# 明言胜于暗喻

class User(db.Model):
    #__tablename__ = ‘user‘ 如果不设置该属性,类名小写作表名
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)

    def __repr__(self):
        return "<User(username: %s)>" % self.username

class Article(db.Model):
    __tablename__ = article
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(50),nullable=False)
    uid = db.Column(db.Integer,db.ForeignKey("user.id"))

    author = db.relationship("User",backref="artiles")

db.drop_all()
db.create_all()

user = User(username=wqbin)
article = Article(title=title one)
sess=db.session

article.author = user
sess.add(article)

sess.commit()

users = User.query.order_by(User.id.desc()).all()
print(users)

user = User.query.filter(User.username==wqbin).first()
user.username=wqbin1

sess.commit()


@app.route(/)
def hello_world():
    return Hello World!


if __name__ == __main__:
    app.run()

 

alembic 

SQLAlchemy该ORM框架本身没有带数据库版本控制功能,但是进行开发过程中难免修改数据模型,添加表,修改字段,都需要手动修改。于是两个解决该缺陷的两个工具应运而生,alembic与SQLAlchemy-Migrate。

alembic是sqlalchemy的作者开发的,Alembic 使用 SQLAlchemy 作为数据库引擎,为关系型数据提供创建、管理、更改和调用的管理脚本,协助开发和运维人员在系统上线后对数据库进行在线管理,主要用来做ORM模型与数据库的迁移与映射。

alembic使用方式跟git类似,表现在两个方面

  1. alembic的所有命令都是以alembic开头;
  2. alembic的迁移文件也是通过版本进行控制的。

以下将解释alembic的用法:

  1. 初始化alembic仓库:在终端中cd到项目目录中,然后执行命令alembic init alembic,创建alembic的仓库。
  2. 创建模型类:创建一个models.py模块,然后在里面定义模型类。
  3. 修改配置文件alembic.init
  4. 修改env.py
  5. 自动生成迁移文件:使用alembic revision --autogenerate-m "aessage"将当前模型中的状态生成迁移文件。
  6. 更新数据库:使用alembic upgrade head将刚刚生成的迁移文件,真正映射到数据库中。同理,如果要降级,那么使用alembic downgrade head。
  1. 修改代码后,重复4~5的步骤。

细节如下:

1.alembic init alembic

技术分享图片

2.alembic.init

from sqlalchemy import Column,String,Integer,create_engine
from sqlalchemy.ext.declarative import declarative_base

DB_USERNAME = root
DB_PASSWORD = root
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_NAME = alembic

DB_URI = mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8 % (DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)

engine = create_engine(DB_URI)

Base = declarative_base(engine)

class User(Base):
    __tablename__ = user
    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(50),nullable=False)
    country = Column(String(50))

3.修改配置文件alembic.init

【alembic】
 sqlalchemy.url = driver://user:pass@localhost/dbname
改成:
【alembic】
 sqlalchemy.url = mysql+pymysql://root:root@localhost/alembic?charset=utf8

4.修改env.py

from __future__ import with_statement

from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context

import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import models
# this is the Alembic Config object, which provides access to the values within the .ini file in use.
config = context.config
# Interpret the config file for Python logging. This line sets up loggers basically.
fileConfig(config.config_file_name)
# add your model‘s MetaData object here for ‘autogenerate‘ support from myapp import mymodel target_metadata = mymodel.Base.metadata
target_metadata = models.Base.metadata

 

技术分享图片

 

 

 

 

 

 

 

 

 

 

第六章 Flask数据库(二)

原文:https://www.cnblogs.com/wqbin/p/11965888.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!