婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 用python開發一款操作MySQL的小工具

用python開發一款操作MySQL的小工具

熱門標簽:哈爾濱ai外呼系統定制 激戰2地圖標注 廣告地圖標注app 騰訊外呼線路 白銀外呼系統 唐山智能外呼系統一般多少錢 海南400電話如何申請 陜西金融外呼系統 公司電話機器人

項目地址

https://github.com/lishukan/directsql

安裝

pip3 install directsql

導入

directsql 目前只提供三個外部類

__all__=["SqlGenerator","MysqlConnection","MysqlPool"]

導入方式

from directsql.sqlgenerator import SqlGenerator   #該類用于生成sql語句

#下面是一個池化連接對象MysqlPool  和一個簡單連接對象 MysqlConnector
from directsql.connector import MysqlConnection,MysqlConnector 

使用

1 創建連接

 # 1. 傳入有名參數
   
    conn = MysqlConnection(host='127.0.0.1', port=3306, password='123456', database='test_base')
    print(conn.database)
    conn=MysqlPool(host='127.0.0.1', port=3306, password='123456', database='test_base')
    
   # 也可使用 直接  參數字典
    conn_args = {
        'host': '127.0.0.1',
        'port': 3306,
        'password': '123456',
        'database':'test_base',
    }
    conn = MysqlConnection(**conn_args)#單個連接
    print(conn.database)
    conn = MysqlPool(**conn_args) #池化連接對象
    print(conn.database)
    
 #2 直接使用 字符串   
    #以下字符串是常用的終端 連接命令
    string_arg="mysql -uroot -h127.0.0.1 -P3306 -p123456  -Dtest_base"  
    conn = MysqlConnection(string_arg=string_arg)
    print(conn.database)
    conn = MysqlPool(string_arg=string_arg)
    print(conn.database)
   
    

2 執行sql語句​

事實上directsql 封裝了 很多 語句。可以滿足很大一部分日常使用場景。但是如果有復雜的語句,仍然需要調用原生的sql 執行。而且directsql 中很多封裝好的方法是先拼接sql 再 調用該語句,所以這里還是先簡單介紹下,directsql 如何執行原生sql。

​ 無論是 MysqlConnection 類 還是 MysqlPool 類 都通過 execute_sql 方法 來執行sql。

例如 :

id name age
1 羅輯 28
2 莊顏 25
3 葉文潔 54
4 程心 25
5 云天明 27

conn = MysqlConnection(string_arg="mysql -uroot -h127.0.0.1 -P3306 -p123456  -Dtest")
result,count=conn.execute_sql("select * from  test_table ")
print(result)
print(count)
>>> ((1, '羅輯', '28'), (2, '莊顏', '25'), (3, '葉文潔', '54'), (4, '程心', '25'), (5, '云天明', '27'))
>>> 5

 #這里默認是普通游標,你也可以指定使用字典游標:

result, count = conn.execute_sql("select  * from  test_table ", cursor_type='dict')

>>>[{'ID': 1, 'name': '羅輯', 'age': '28'}, {'ID': 2, 'name': '莊顏', 'age': '25'}, {'ID': 3, 'name': '葉文潔', 'age': '54'}, {'ID': 4, 'name': '程心', 'age': '25'}, {'ID': 5, 'name': '云天明', 'age': '27'}]
>>>5

 execute_sql 方法 返回的是一個元組,(結果集,條數)

下文出現的所有方法無特殊說明都是返回元組,且支持dict游標

附帶參數執行語句

這里的參數使用起來和 pymysql 提供的 execute 以及executemany 沒有任何 差別,以下簡單提供幾個示例:

#傳元組
result,count=conn.execute_sql("select  * from  test_table where age=%s ",param=(25,))
#傳字典
result, count = conn.execute_sql("select  * from  test_table where age=%(age)s ", param={'age': 25})

#元組列表
result, count = conn.execute_sql("insert into  test_table(`age`,`name`)values(%s,%s) ", param=[('宋運輝', 37), ('程開顏', 33)])

#字典列表
result, count = conn.execute_sql("insert into  test_table(`age`,`name`)values(%(age)s,%(name)s) ",
param=[ {"name":"宋運輝",'age':37}, {"name":"程開顏",'age':33} ])

3  select 方法

select 方法 可以接受多參數,參數列表如下。

def select(self, columns='id', table=None, where=None, group_by: str = None, order_by: str = None, limit: int = None, offset=None,cursor_type=None):

​ 》》》 conn.select('*', 'test_table')

  • select id from test_table where age=25

》》》 conn.select('*', 'test_table', where={'age': 25})

  • select name,age from test_table where age=25 and id=2

多字段直接傳入字符串

》》》 conn.select("age,name", 'test_table', where={'age': 25,'id':2})

傳入列表/元組

》》》 conn.select(['age','name'], 'test_table', where={'age': 25,'id':2})

  • select * from test_table group by id order by age desc limit 1 offset 1

》》》conn.select('*', 'test_table', order_by='age desc',group_by='id',limit=1,offset=1)

​ select 功能看起來甚至不如直接寫原生sql 快,但是如果查詢條件是在不斷變化的,尤其是where條件,那么使用select 方法 會比自行拼接更方便。

​ 例如,需要不斷地讀取一個字典變量,然后根據這個變量中的條件去查詢數據,而這個字典的鍵個數會變化,但是鍵都恰好是表的字段。這個時候使用select 方法會十分簡便,只需要令where參數等于那個字典即可。

​ 平心而論,這個方法確實用處不大。

4 insert_into 方法

def insert_into(self, table, data: dict or list, columns=None, ignroe=False, on_duplicate_key_update: str = None, return_id=False):

該方法可以接受傳入字典或者 字典列表,并且可選 返回 游標影響的條數 或者是 新插入的數據的id。

columns 為空時,將取第一條數據的所有鍵,此時請確保所有數據鍵相同。

#傳入 字典
data_1 = {"age": 44, 'name': "雷東寶"}
count = conn.insert_into('test_table', data_1)#默認返回受影響條數
print(count) #
>>> 1 
return_id = conn.insert_into('test_table', data_1,return_id=True)# 可選返回id
print(return_id)
>>>22533   

#傳入字典列表
data_2={"age": 22, 'name': "宋運萍"}
all_data=[data_1,data_2]
count = conn.insert_into('test_table', all_data)

#限定 插入的字段。(字典有多字段,但是只需要往表里插入指定的字段時)
data_3= {"age": 44, 'name': "雷東寶","title":"村支書"} #title不需要,只要age和name
count = conn.insert_into('test_table', data_1,columns=["age","name"] )


#ignore 參數
data_1 = {"age": 44, 'name': "雷東寶","id":22539}
count = conn.insert_into('test_table',ignore=True )
print(count)
>>> 0   # 由于表中id 22539 已經存在,該條記錄不會插入,影響 0條數據


#on_duplicate_key_update  參數
data_1 = {"age": 44, 'name': "雷東寶","id":22539} #id=22539 已經存在
count = conn.insert_into('test_table', data_1,on_duplicate_key_update=' name="雷copy" ')
print(count)#返回影響條數
>>>2      #嘗試插入一條,但是發生重復,于是刪除新數據,并更新舊數據。實際上影響了兩條。



在insert_into 方法中提供了 on_duplicate_key_update 參數,但是實際上使用起來比較雞肋,需要自己傳入 on_duplicate_key_update 后的語句進行拼接。

如果你僅僅只是需要在發生重復時將舊數據的特定字段更新為新數據對應字段的值時。merge_into 方法更適合。

5 merge_into 方法

在 其他關系型數據庫中,提供有merge into 的語法,但是mysql 中沒有提供。 不過這里我們通過insert 和 on_duplicate_key_update 語法 封裝出了一個 類似merge_into 的方法。 該方法返回的是影響的條數

def* merge_into(self, table, data, columns=None, need_merge_columns: list = None):

columns 為空時,將取第一條數據的所有鍵,此時請確保所有數據鍵相同。

need_merge_columns 為在發生重復時需要替換(覆蓋)的字段。

data_1 = {"age": 44, 'name': "雷東寶","id":22539}
data_2={"age": 22, 'name': "宋運萍","id":22540}
all_data = [data_1, data_2,]
count=conn.merge_into('test_table',all_data,need_merge_columns=['name',])
print(count)
>>>4        #兩條數據正好都是重復的,插入兩條又刪除后修改兩條 ,返回4

6 replace_into 方法

該方法簡單,不做過多說明。該方法 返回的是影響的條數

def replace_into(self,table, data: dict or list, columns=None)

data_1 = {"age": 44, 'name': "雷東寶","id":22539}
data_2={"age": 22, 'name': "宋運萍","id":22540}
all_data = [data_1, data_2,]
count=conn.replace_into('test_table',all_data)

7 update 方法

def update(self,table, data: dict, where, columns: None or list = None, limit=None):

該方法data 參數只接受傳入字典。該方法 返回的是影響的條數

data_1 = {"age": 44, 'name': "雷copy"}
count=conn.update('test_table',data_1,where={'id':22539}) #更新 id=22539的數據為 新的data_1
print(count)
>>>1  

除此之外,還提供了一個衍生的方法

def update_by_primary(self, table, data: dict, pri_value, columns=None, primary: str = 'id'):

用于通過主鍵去更新數據。pri_value 即為主鍵的值。primary 為主鍵,默認為id

data_1 = {"age": 44, 'name': "雷cpy"}
count=conn.update_by_primary('test_table',data_1,pri_value=22539)

8 delete 方法

def delete_by_primary(self, table, pri_value, primary='id'):
	"""
	通過主鍵刪除數據
	"""

def delete(self,table, where: str or dict, limit: int = 0):
	"""
	通過where條件刪除數據
	"""


count=conn.delete('test_table',where={'name':'雷東寶'})          #刪除name=雷東寶的數據
count=conn.delete_by_primary('test_table',pri_value=22539)         #刪除主鍵等于22539 的數據

9 使用 事務

def do_transaction(self, sql_params: list, cursor_type=None):

sql_params 為 元組列表。 【(sql_1,param_1),(sql_2,param_2】

如果sql 不需要參數也要傳入 None ,如 【(sql_1,None),】

sql_params = [
        ("update test_table set name=%(name)s where  id=%(id)s ", {'name': '洛基', 'id': 22539}),
        ("update test_table set name=%(name)s where  id=%(id)s ", {'name': 'mask', 'id': 22540}),
    ]
count=conn.do_transaction(sql_params)
>>>((), 1)          #返回最后一條執行語句的 結果和影響條數

10 讀取流式游標結果

def read_ss_result(self, sql, param=None, cursor_type='ss'):

cursor_type 可選 ss 和 ssdict

注意,該方法返回的是 生成器對象,拿到結果需要不斷進行遍歷。

result=conn.read_ss_result("select * from test_table")
for data in result:
	print(data)

以上就是python開發一款操作MySQL的小工具的詳細內容,更多關于python 操作MySQL的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 使用Python制作一個打字訓練小工具
  • Python編寫打字訓練小程序
  • 新手必備的Python實用技巧和工具
  • python調試工具Birdseye的使用教程
  • Python包管理工具pip的15 個使用小技巧
  • python 制作一個gui界面的翻譯工具
  • Python超簡單容易上手的畫圖工具庫推薦
  • python 實現的截屏工具
  • 用Python實現一個打字速度測試工具來測試你的手速
  • python做翻譯軟件詳解,小白也看得明白

標簽:鷹潭 惠州 常德 上海 益陽 黑龍江 黔西 四川

巨人網絡通訊聲明:本文標題《用python開發一款操作MySQL的小工具》,本文關鍵詞  用,python,開發,一款,操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用python開發一款操作MySQL的小工具》相關的同類信息!
  • 本頁收集關于用python開發一款操作MySQL的小工具的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久蜜桃av一区精品变态类天堂| av午夜精品一区二区三区| 亚洲欧美电影一区二区| 国产偷国产偷亚洲高清人白洁| 欧美一区二区三区免费观看视频| 欧美午夜寂寞影院| 欧美精品一二三| 91精品国产综合久久精品| 91麻豆精品国产自产在线| 日韩三级在线观看| 久久香蕉国产线看观看99| 中文在线资源观看网站视频免费不卡| 欧美国产一区二区在线观看| 中文字幕一区二区三区精华液| 中文字幕日韩精品一区| 亚洲精品欧美专区| 日欧美一区二区| 极品美女销魂一区二区三区 | 成人永久aaa| 一本一道综合狠狠老| 欧美日韩免费视频| 日韩精品中文字幕一区 | 67194成人在线观看| 日韩午夜激情免费电影| 国产欧美精品一区| 性做久久久久久免费观看欧美| 麻豆国产精品一区二区三区 | 久久99国产精品久久| 成人免费电影视频| 欧美日本韩国一区| 国产精品免费av| 日韩成人免费在线| kk眼镜猥琐国模调教系列一区二区 | 成人动漫av在线| 91精品蜜臀在线一区尤物| 国产精品久久毛片| 乱一区二区av| 日本高清免费不卡视频| 久久久久一区二区三区四区| 亚洲成人精品在线观看| 成人av午夜影院| 精品免费视频一区二区| 亚洲福利国产精品| 99vv1com这只有精品| 国产亚洲成av人在线观看导航| 首页国产欧美久久| 97精品超碰一区二区三区| 欧美精品一区二区三区蜜桃视频 | 中文字幕制服丝袜成人av| 亚洲国产aⅴ天堂久久| 成人动漫一区二区在线| 2021国产精品久久精品 | 久久免费看少妇高潮| 性做久久久久久久久| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 一本一道久久a久久精品综合蜜臀| 久久日韩粉嫩一区二区三区| 日产精品久久久久久久性色| 欧美亚洲国产一区二区三区va| 国产精品天天摸av网| 国产一二三精品| 久久伊人蜜桃av一区二区| 日韩av电影免费观看高清完整版 | 欧美色综合网站| 亚洲天堂中文字幕| 国产成人综合在线| 中文字幕乱码亚洲精品一区| 国产麻豆日韩欧美久久| 精品国产青草久久久久福利| 日韩激情在线观看| 欧美电影免费提供在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩电影在线播放| 亚洲国产成人av网| 欧美一区二区播放| 国产一区视频网站| 久久久五月婷婷| 国产成人亚洲精品青草天美| 日本一区二区三区久久久久久久久不 | 欧美美女直播网站| 污片在线观看一区二区| 这里是久久伊人| 国产剧情一区二区| 中文字幕一区三区| 欧美午夜电影网| 七七婷婷婷婷精品国产| 久久青草国产手机看片福利盒子| 国产盗摄精品一区二区三区在线| 亚洲欧美综合色| 欧美性感一区二区三区| 视频精品一区二区| 久久精子c满五个校花| 91在线视频网址| 日韩av电影免费观看高清完整版在线观看| 日韩午夜av电影| 成人蜜臀av电影| 亚洲一级二级在线| 欧美成人精品3d动漫h| 国产剧情一区在线| 亚洲精品乱码久久久久久| 欧美精品久久一区| 高清视频一区二区| 性久久久久久久久| 国产精品三级电影| 欧美丰满高潮xxxx喷水动漫| 国产一区二区三区黄视频| 依依成人综合视频| 26uuu亚洲综合色| 欧美色爱综合网| 丰满放荡岳乱妇91ww| 日韩 欧美一区二区三区| 中文一区在线播放| 91麻豆精品91久久久久同性| eeuss影院一区二区三区 | 亚洲综合色视频| 国产人成一区二区三区影院| 欧美精品九九99久久| 不卡在线观看av| 国内精品久久久久影院色 | 久久久久国产精品厨房| 欧美吞精做爰啪啪高潮| 国产精品一二三区| 久久成人免费网站| 亚洲成人www| 亚洲精品伦理在线| 中文字幕在线一区免费| 久久久久久日产精品| 欧美一区中文字幕| 欧美三级三级三级| 在线看国产日韩| 日本电影亚洲天堂一区| 成人亚洲一区二区一| 激情综合色综合久久| 日韩电影在线观看一区| 一区二区三国产精华液| 国产精品伦理一区二区| 2024国产精品| 久久影院午夜片一区| 精品久久久久久久久久久久久久久久久| 欧美综合在线视频| 在线视频一区二区三区| 一本高清dvd不卡在线观看| 99视频精品在线| 91丨国产丨九色丨pron| 成人av资源站| 91美女福利视频| 99riav一区二区三区| 99精品久久99久久久久| 成人黄色小视频在线观看| 成人综合在线观看| 91在线精品一区二区三区| 99久久精品情趣| 欧美中文字幕一区二区三区亚洲| 一本大道久久a久久综合婷婷| aaa亚洲精品| 欧美亚日韩国产aⅴ精品中极品| 91福利社在线观看| 欧美日韩在线免费视频| 欧美精选一区二区| 精品三级在线看| 中文在线资源观看网站视频免费不卡| 久久久久国产精品免费免费搜索| 国产精品三级久久久久三级| 亚洲欧美日韩精品久久久久| 一区二区国产盗摄色噜噜| 性久久久久久久久久久久| 日韩电影一区二区三区四区| 美女视频黄免费的久久| 国产成人av自拍| 欧美主播一区二区三区美女| 7878成人国产在线观看| 久久久久亚洲蜜桃| 有码一区二区三区| 美女一区二区三区| 成人免费毛片嘿嘿连载视频| 欧美在线免费观看亚洲| 日韩欧美中文字幕精品| 国产精品福利电影一区二区三区四区| 亚洲精品视频在线| 国产综合久久久久影院| 91久久久免费一区二区| 日韩免费性生活视频播放| 国产精品久久夜| 青青青爽久久午夜综合久久午夜| 国产xxx精品视频大全| 欧美电影一区二区三区| 国产精品理伦片| 久久国产日韩欧美精品| 色嗨嗨av一区二区三区| 久久―日本道色综合久久| 午夜视频一区在线观看| 99在线精品观看| 国产日产欧美一区二区三区| 亚洲电影你懂得| 91视频你懂的| 国产欧美日韩综合精品一区二区| 午夜激情综合网| 欧洲亚洲国产日韩| 亚洲视频每日更新| 国产mv日韩mv欧美|