(點選上方快速關註並設定為星標,一起學Python)
github:https://github.com/mouday/PyThink
說下這個pythink
模組的作用
背景:
我們公司的主要使用的後端語言有兩種,python和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
程式碼示例
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()
當然還可以進行各種增刪改查,不過還處於測試階段,如果用於正式專案還要註意其執行的結果
朋友會在“發現-看一看”看到你“在看”的內容