Python编程:使用pythink查询数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Python编程:使用pythink查询数据库

github:https://github.com/mouday/PyThink


说下这个pythink模块的作用


背景:

我们公司的主要使用的后端语言有两种,python和php

d13.1.png


Python爬虫

MySQL数据库

PHP业务处理

而且有一个专门的DBA管理数据库,就是说,这个数据库不是你一个人的,有同组的成员和其他组的成员在使用,好像大部分公司都一样。


Python爬虫部分的业务,主要操作是插入;而PHP业务主要是查询


最开始我使用普通的模块pymysql,这样每次都要去连接,关闭,很麻烦;

import pymysql 
conn = pymysql.Connect(
    host="127.0.0.1", 
    port=3306, 
    user="root",
    passwd="123456",
    db="test"
)
cursor = conn.cursor()
rows = cursor.execute("insert into student(name, age, register_date, gender) values ('xiaoming', 23, '2018-12-30', 'M')")
cursor.close()
conn.close()

后来使用了peewee 来管理数据库链接,使用Model来创建数据库(这个时候还没有人管理数据库),简直不要太爽,不写一行SQL语句就实现了表创建,和数据操作;


后来我这边的表太多了,业务发展也规范了,专门有人管理数据库。这样就不能使用Model直接建表,而是要写成sql语句给数据库管理人员,审核完后再进行建表操作

from peewee import *
# 设置数据库
db = MySQLDatabase("mysql://root:123456@127.0.0.1:3306/demo")
class BaseModel(Model):
    class Meta:
        database = db
# 定义数据表
class User(BaseModel):
    name = CharField()
User.create(name="Tom")

在这种情况下,如果使用Model就必须先写sql建表,再把所有字段定义写出来才可以使用,如果涉及的表字段少还好,有时候涉及100多个字段(真的有过),那光是定义就一上午,Model的优势反而成了累赘,心累;


于是我开始不用Model了,直接使用peewee 提供execute_sql 这样我们又回到了原生sql的时代;

db.execute_sql("insert into student(name, age) values ('Tom', 24)")

一般情况下,会将sql执行的语句和结果封装到一个函数中。写的多了,发现很多重复代码,除了sql不一样以外,其他格式基本一致。于是需要抽象出来,将相同代码抽象封装,以便复用。


于是pythink 出现了,结合了peewee 的操作方式,也保留了一部分原生sql 的格式,比如,增(insert)、删(delete)、改(update)、查(select)基本保留了sql的关键字,不需要额外记忆和区别,而且可以把对表的操作单独卸载model中,进行统一管理,也可以重写基类的方法,自己实现自己的业务逻辑(不建议,建议取一个不一样的函数名字)。


一起感受下其如丝般顺滑的操作

安装

pip install pythink

代码示例

数据库demo 中有 一个表student,对其进行数据查询

mysql> use demo;
mysql> select * from student limit 2;
+----+------+------+------+
| id | name | age  | sex  |
+----+------+------+------+
|  1 | Tom  |   24 |    1 | 
|  2 | jack |   23 |    0 |
+----+------+------+------+
2 rows in set (0.00 sec)
# -*- coding: utf-8 -*-
from pythink import ThinkModel
from playhouse.db_url import connect
# 1、使用peewee进行数据库连接
db = connect("mysql://root:123456@127.0.0.1:3306/demo")
# 2、继承 ThinkModel 实现自己的类
class StudentThinkModel(ThinkModel):
    table_name = "student"
    database = db
# 3、数据插入insert
data = {
    "name": "Tom",
    "age": 24
}
result = StudentThinkModel.insert(data)
print(result)
# 1
# 4、删除
result = StudentThinkModel.delete(13)
print(result)
# 1
# 5、修改
data = {
    "name": "Tom",
    "age": 24
}
result = StudentThinkModel.update(1, data)
print(result)
# 1
# 6、查询数据库中 id=1 的 name 和 age 两个字段
students = StudentThinkModel.select(fields=["name", "age"],  where="id=1", limit=1)
for student in students:
    print("name: {}".format(student.name))
    print("age: {}".format(student.age))
"""
name: Tom
age: 24
"""
# 7、记得关闭数据库连接
db.close()

当然还可以进行各种增删改查,不过还处于测试阶段,如果用于正式项目还要注意其执行的结果

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 关系型数据库 数据库连接
使用 Python 访问数据库的基本方法
【5月更文挑战第12天】在Python中操作数据库涉及安装数据库驱动(如mysql-connector-python, psycopg2, pymongo)、连接数据库、执行查询/更新、处理结果集及关闭连接。使用ORM(如SQLAlchemy)可简化操作。通过上下文管理器(with语句)能更好地管理资源和错误。注意根据实际需求处理事务、错误和安全性,例如使用SSL连接。
11 2
|
2天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
3天前
|
数据库
编程日记02:个人站优化数据库和日志
编程日记02:个人站优化数据库和日志
9 0
|
4天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
19 5
|
4天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0
|
4天前
|
JSON 数据格式 索引
python之JMESPath:JSON 查询语法库示例详解
python之JMESPath:JSON 查询语法库示例详解
14 0
|
6天前
|
开发者 Python
在Python中查询进程信息的实用指南
在Python中查询进程信息的实用指南
9 2
|
7天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
10 0
|
7天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
32 2
|
13天前
|
测试技术 调度 索引
python编程中常见的问题
【4月更文挑战第23天】
32 2