歡迎光臨
每天分享高質量文章

Python程式設計:使用pythink查詢資料庫

(點選上方快速關註並設定為星標,一起學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()

當然還可以進行各種增刪改查,不過還處於測試階段,如果用於正式專案還要註意其執行的結果

    已同步到看一看
    贊(0)

    分享創造快樂