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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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()

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
7天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
8天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
8天前
|
消息中间件 分布式计算 并行计算
Python 高级编程与实战:构建分布式系统
本文深入探讨了 Python 中的分布式系统,介绍了 ZeroMQ、Celery 和 Dask 等工具的使用方法,并通过实战项目帮助读者掌握这些技术。ZeroMQ 是高性能异步消息库,支持多种通信模式;Celery 是分布式任务队列,支持异步任务执行;Dask 是并行计算库,适用于大规模数据处理。文章结合具体代码示例,帮助读者理解如何使用这些工具构建分布式系统。
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
173 42
|
2天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
27天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
130 25
|
14天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
21天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。

热门文章

最新文章