1. 前言
上一篇我们讲了通过pymysql直接操作数据库,需要我们自己去建立连接,编写sql,执行sql。
现在更流行的方式,是通过ORM,即对象-关系映射的方式,来更加便捷的操作数据库。本篇我们就借助sqlalchemy,来实现ORM操作数据库。
2. 创建数据库
使用MySQL创建数据库testdb,并在库中创建user表,表结构如下:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`sex` varchar(50) DEFAULT NULL,
`age` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
为方便测试,数据库中插入两条数据:
3. 安装sqlalchemy
sqlalchemy是Python语言的ORM工具,可以很方便的操作数据库,我们首先安装下它,依次执行如下命令。
$ pip3 install flask
$ pip3 install pymysql
$ pip3 install SQLAlchemy
$ pip3 install flask-sqlalchemy
注意我们是在flask框架下使用,然后要连接mysql,所以需要执行上述命令。
4. 建立基本程序
基本结构如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
uri = 'mysql+pymysql://root:123456@127.0.0.1:3306/testdb'
app.config['SQLALCHEMY_DATABASE_URI'] = uri
db = SQLAlchemy(app)
注意通过上述代码,我们引入了falsk框架和flask_sqlalchemy框架,另外通过uri制定了我们要访问的数据库。
5. 建立ORM映射
代码如下:
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
password = db.Column(db.String(255))
sex = db.Column(db.String(255))
age = db.Column(db.String(255))
通过继承db.Model类,user成为ORM映射的类,通过__tablename__ 制定了对应的表为user表。
然后通过下面的5行代码制订了属性跟数据库列的对应关系。
6. 增删改查操作
增删改查操作非常简单:
print("======查询全部:")
users = User.query.all()
for user in users:
print(user.name)
print("======按条件查询:")
users=User.query.filter_by(id=1)
for user in users:
print(user.name)
print("======新增数据:")
newUser=User()
newUser.name="李四"
newUser.password="111"
newUser.sex="男"
newUser.age="12"
db.session.add(newUser)
db.session.commit()
print("======更新数据:")
user=User.query.filter_by(id=1)
user.update({'name':'王老三'})
db.session.commit()
print("======删除数据:")
users=User.query.filter_by(name='李四')
users.delete()
db.session.commit()
需要注意的是:
如果是更新类操作,执行操作后需要db.session.commit()来提交事务。
更新和删除,都是先查询出一些记录来,然后对这些记录应用更新或删除。
7. 总结
sqlalchemy对ORM的实现还是非常简洁的,比pymysql直接操作数据库简单多了!