ORM简单介绍:
ORM:Object Relationship Mapping(模型关系映射)。
平时我们和数据库打交道的话,会使用SQL语句来操作数据库,比如我们建立一个demo表:
CREATE TABLE demo(num int ,ser varchar(20);
发现,就是通过一些SQL语句来操作数据库,并没有面向对象的过程,而我们不论java还是python都是面向对象的编程语言。之前使用SQL操作也能做,但是与我们面向对象的理论不符合。而且为了操作更加方便,使开发人员不用去写过多的SQL语句,出现了ORM。作用就是在关系型数据库和业务实体对象之间做一个映射。简单来说:举个例子,我想创立一个user表,我不需要去写SQL语句,而是创建一个user的类,里面定义好它的属性。然后通过ORM就帮我们实现了从类到表的映射,表就自己创建成功了。可以让我们操作数据库就跟操作对象是一样的。一个表就抽象成一个类,一条数据就抽象成该类的一个对象。
所有的ORM必须具备三方面的能力:映射能力,CRUD操作(增删改查),缓存优化。
Flask sqlalchemy:
flask - sqlalchemy 就是一套ORM框架。
flask - sqlalchemy 的安装:pip install flask-sqlalchemy
flask - sqlalchemy 的使用:
1.初始化和设置数据库配置信息
我们既然使用sqlalchemy这个ORM框架,那它本身就是一个类,我们使用一个类,就得先创建这个类得对象,然后使用对象来操作吧。所以,
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app)
这时候注意,db为Sqlalchemy的对象。而查看SQlalchemy的官方文档,我们发现它创建对象的时候需要传递一个flask 的应用对象app进去。如图:两种传参方式。
初始化完成后,我们还需要配置数据库,就是告诉这个ORM对象db链接哪个数据库:
SQLAlchemy 把一个引擎的源表示为一个连同设定引擎选项的可选字符串参数的 URI。URI 的形式是:
dialect+driver://username:password@host:port/database
而且框架规定URI的名字必须统一,就是SQLALCHEMY_DATABASE_URI,整体格式如下:
SQLALCHEMY_DATABASE_URI = dialect+driver://username:password@host:port/database
我使用的是postgreSQL数据库,配置信息都写在一个叫config.py文件中,链接信息填写如下:
HOSTNAME = '127.0.0.1' PORT = '5432' DATABASE = 'xxxx' USERNAME = 'xxxxxxx' PASSWORD = 'xxxxxxxxxxxx' DB_URI = 'postgresql+psycopg2://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) SQLALCHEMY_DATABASE_URI = DB_URI
然后在我们的主文件中:
import config
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
这样呢就完成了数据库的初始化和配置。
2.模型与表的映射
之前讲了,我们一张表对应的就是一个类,而我们创建一个类之后,框架需要知道我们创建的这个类就是要用来映射成表的,那么就得给这个类传入一个参数,告诉框架,这是模型类:比如我创建一个用户表,那就得把SQLAlchemy里面的model属性传入:如下
class User(db.Model): __tablename__='user' #表名设置为user id = db.Column(db.Integer,primary_key=True,autoincrement=True) #id属性 对应的就是表中的id这一项 telephone = db.Column(db.String(11),nullable=False) #只要这个属性要映射到数据库中,就是db.Column()类型 username = db.Column(db.String(50),nullable=False) password = db.Column(db.String(100),nullable=False)
3.增删改啥操作
我们有了user这个类,那么一条数据对应的就是一个对象。假设我们已经从前端获取了用户输入的注册数据:
mytelephone = request.form.get('telephone') myusername = request.form.get('username') mypassword1 = request.form.get('password')
然后我们创建一个User类的对象,把参数传入。
user = User(telephone=mytelephone, username=myusername, password=mypassword)
要在sqlalchemy这个框架中使用增删改查,那么就要使用它自己内部的一个属性:session(这个和全局的那个session/cookie没关系,)如下:
db.session.add(user) #使用sqlalchemy的对象db来操作sqlalchemy,使用sqlalchemy里面的session中的add方法添加。
而且我们对数据库的操作都属于事务,不明白的可以自行百度。所以我们写完db.session.add(user)后,如果没有提交的话,代码是不会执行的。所以要提交事务:
db.session.commit()
这样完了之后,我们才会在数据库中添加了这条数据。其他的删改查类似。就不一 一列举了。