当前位置: 首页>数据库>正文

SQLAlchemy可以连接的数据库 sqlalchemy支持哪些数据库


Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。它使用结构化的查询语言。关系型数据库的列定义了表中表示的实体的数据属性。比如:商品表里有name、price、number等。   Flask本身不限定数据库的选择,你可以选择SQL或NOSQL的任何一种。也可以选择更方便的SQLALchemy,类似于Django的ORM。SQLALchemy实际上是对数据库的抽象,让开发者不用直接和SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。   SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask_sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。   使用flask_sqlalchemy扩展操作数据库,首先需要建立数据库连接。数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI键中。   Flask数据库配置:


app.config['SQLALCHEMY_DATABASE_URI']= 'mysql://root:mysql@127.0.0.1:3306/test3'


  常用的SQLAlchemy字段类型:


类型名

python中类型

说明

Integer

int

普通整数,一般是32位

SmallInteger

int

取值范围小的整数,一般是16位

BigInteger

int或long

不限制精度的整数

Float

float

浮点数

Numeric

decimal.Decimal

普通整数,一般是32位

String

str

变长字符串

Text

str

变长字符串,对较长或不限长度的字符串做了优化

Unicode

unicode

变长Unicode字符串

UnicodeText

unicode

变长Unicode字符串,对较长或不限长度的字符串做了优化

Boolean

bool

布尔值

Date

datetime.date

时间

Time

datetime.datetime

日期和时间

LargeBinary

str

二进制文件

常用的SQLAlchemy列选项:

选项名

说明

primary_key

如果为True,代表表的主键

unique

如果为True,代表这列不允许出现重复的值

index

如果为True,为这列创建索引,提高查询效率

nullable

如果为True,允许有空值,如果为False,不允许有空值

default

为这列定义默认值

常用的SQLAlchemy关系选项:

选项名

说明

backref

在关系的另一模型中添加反向引用

primary join

明确指定两个模型之间使用的联合条件

uselist

如果为False,不使用列表,而使用标量值

order_by

指定关系中记录的排序方式

secondary

指定多对多中记录的排序方式

secondary join

在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件


在flask_sqlalchemy中增删改查操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。   数据库会话是为了保证数据的一致性,避免因部分更新导致数据不一致。提交操作把会话对象全部写入数据库,如果写入过程发生错误,整个会话都会失效。   数据库会话也可以回滚,通过db.session.rollback()方法,实现会话提交数据前的状态。   在flask_sqlalchemy中,查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。   下面是使用flask_sqlalchemy实现的学生信息的增删改查:


MySQL 版本:8.0.12MySQL Community Server – GPL


db_file.py


from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)# app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:12345678@192.168.10.241/wcp"# 上面配置报1366 字符集warning 安装mysql-connector-python,使用下面配置app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://root:12345678@192.168.10.241/wcp"# 追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False# 设置每次请求结束后会自动提交数据库中的改动app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True  # app.config['SQLALCHEMY_ECHO'] = True  # 查询时会显示原始SQL语句db = SQLAlchemy(app)class students(db.Model):    __tablename__ = 'students'  # 指明表名,默认与类相同    id = db.Column('student_id', db.Integer, primary_key=True)    name = db.Column(db.String(100))    city = db.Column(db.String(50))    addr = db.Column(db.String(200))    tel = db.Column(db.String(11))    def __repr__(self):        return 'id:{} name:{} city:{} addr:{} tel:{}'.format(self.id,            self.name, self.city, self.addr, self.tel)

WC_public_flask.py

from flask importrender_template, requestfrom db_file importapp,db,students@app.route('/',methods=['GET','POST'])def hello():    # print(request.method)    if request.method== 'GET':        data = students.query.all()        return render_template('index.html',result= data)    elif request.method== 'POST':        id = request.form['id']        name = request.form['name']        city = request.form['city']        addr = request.form['addr']        tel = request.form['tel']        user = students(id=id,name=name,city=city,addr=addr,tel=tel)        db.session.add(user)        db.session.commit()        data = students.query.all()        return render_template('index.html',result= data)@app.route('/delurl',methods=['POST'])def delfun():    delobj = request.form['del']    user = students.query.filter_by(id=delobj).first()    db.session.delete(user)    db.session.commit()    data = students.query.all()    return render_template('index.html', result=data)if __name__ == '__main__':    db.create_all()    app.run(debug=True)


db.create_all()在执行程序时首先要创建表,防止表存在还可以先执行db._drop_all(),还要注意的是GET方法时要获取前端数据要使用request.args.get(“name”),POST方法时要获取前端数据要使用request.form[“name”]。

index.html

flask SQLAlchemy


                                    学号                姓名                城市                地址                电话                操作                   {% for j in result %}                                {{ j.id }}                {{ j.name }}                {{ j.city }}                {{ j.addr }}                {{ j.tel }}            {% endfor %}    


输入新生信息:

学号:

姓名:

城市:

地址:

电话:





https://www.xamrdz.com/database/6yu1931107.html

相关文章: