连接

1
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234@1234:3306/testDB?charset=utf8'

使用pymysql驱动连接mysql

Modle 类(模型)

1
2
3
4
5
6
7
8
class Job(db.Model):
# __tablename__="郁峻峰牛批"
id=db.Column(db.Integer,primary_key=True)
jobName = db.Column(db.TEXT,default="NULL")
company = db.Column(db.TEXT,default="NULL")
city = db.Column(db.TEXT,default="NULL")
pay = db.Column(db.TEXT,default="NULL")
date = db.Column(db.TEXT,default="NULL")

注意事项:

继承db.Model类
__tablename__:指定表名,如果不指定默认类名
primary_key=True:主键,必须有一个主键
autoincrement=True:自增字段

参考资料:

SQLAlchemy查询过滤器和执行函数

sqlalchemy常见数据类型及配置

备注:

__init__:构造方法
__repr__: 用来表示对象的可打印字符串
*同时定义 __repr__ 方法和 __str__ 方法时,print() 方法会调用 __str__ 方法*

搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 简单查询
print(db.session.query(User).all())
print(db.session.query(User.name, User.fullname).all())
print(db.session.query(User, User.name).all())

#带条件查询
print(db.session.query(Job).filter_by(name='user1').all())
print(db.session.query(Job).filter(Job.name == "user").all())
print(db.session.query(Job).filter(Job.company.like("%云计算%")).all()

#多条件查询
print(session.query(User).filter(and_(User.name.like("%user%"), User.fullname.like("%first%"))).all())
print(session.query(User).filter(or_(User.name.like("%user%"), User.password != None)).all())

备注:

1
2
3
4
5
6
7
from sqlalchemy import or_

words = ['%云计算%', '%大数据%']

rule = or_(*[Job.company.like(w) for w in words])
print(rule)
print(Job.query.filter(rule).all())

这里涉及到星号变量和列表生成式。

首先回顾一下列表生成式(List Comprehensions)。

[Job.company.like(w) for w in words] ==> [Job.company.like(%云计算%),Job.company.like(%大数据%)]

这样的一个列表,通过星号变量,将列表拆分,传参给or_()函数,最终形成多条件查询代码。