10.ORM库的运用(SQLAlchemy)
什么是ORM?
是用代码封装SQL的操作,既只需要写Python代码即可自动生成SQL查询
为什么用ORM?
因为数据项目查库的地方多
简单范例
下面的代码是我为巡检任务编写的数据库操作类(ORM的概念就是用类操作数据库) 实际上创建表也可以用这里的test_log_v1数据类来操作 其他各种操作,可以编写成py函数(如下update_data和search_date)
# 创建对象的基类:
Base = declarative_base()
# 定义数据表对象:
class test_log_v1(Base):
# 表的名字:
__tablename__ = 'retry_list'
# 表的结构:
url_no = Column(BigInteger,primary_key = True)
retry_status = Column(BigInteger)
# ================
# 初始化数据库连接:
engine = create_engine('mysql+mysqlconnector://root:b_test')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# ===================
def update_data(url_no,retry_status):
# 写数据
# 创建session对象:
session = DBSession()
info = session.query(test_log_v1).filter(test_log_v1.url_no == url_no).update({'retry_status':retry_status})
# # 创建新User对象:
# info = test_log_v1(url_no=url_no,retry_status=retry_status)
# 添加到session:
# session.add(info)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
# ====================
def search_date(url_no):
# 查询数据
# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
info = session.query(test_log_v1).filter(test_log_v1.url_no==url_no).one()
# 打印类型和对象的name属性:
print('status:', info.retry_status)
# 关闭Session:
session.close()
if __name__ == '__main__':
update_data(1,9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
上次更新: 2023/09/06, 23:51:11