成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 用python開發(fā)一款操作MySQL的小工具

用python開發(fā)一款操作MySQL的小工具

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

項(xiàng)目地址

https://github.com/lishukan/directsql

安裝

pip3 install directsql

導(dǎo)入

directsql 目前只提供三個(gè)外部類

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

導(dǎo)入方式

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

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

使用

1 創(chuàng)建連接

 # 1. 傳入有名參數(shù)
   
    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')
    
   # 也可使用 直接  參數(shù)字典
    conn_args = {
        'host': '127.0.0.1',
        'port': 3306,
        'password': '123456',
        'database':'test_base',
    }
    conn = MysqlConnection(**conn_args)#單個(gè)連接
    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 執(zhí)行sql語句​

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

​ 無論是 MysqlConnection 類 還是 MysqlPool 類 都通過 execute_sql 方法 來執(zhí)行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

 #這里默認(rèn)是普通游標(biāo),你也可以指定使用字典游標(biāo):

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 方法 返回的是一個(gè)元組,(結(jié)果集,條數(shù))

下文出現(xiàn)的所有方法無特殊說明都是返回元組,且支持dict游標(biāo)

附帶參數(shù)執(zhí)行語句

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

#傳元組
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=[('宋運(yùn)輝', 37), ('程開顏', 33)])

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

3  select 方法

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

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 方法 會(huì)比自行拼接更方便。

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

​ 平心而論,這個(gè)方法確實(shí)用處不大。

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):

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

columns 為空時(shí),將取第一條數(shù)據(jù)的所有鍵,此時(shí)請確保所有數(shù)據(jù)鍵相同。

#傳入 字典
data_1 = {"age": 44, 'name': "雷東寶"}
count = conn.insert_into('test_table', data_1)#默認(rèn)返回受影響條數(shù)
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': "宋運(yùn)萍"}
all_data=[data_1,data_2]
count = conn.insert_into('test_table', all_data)

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


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


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



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

如果你僅僅只是需要在發(fā)生重復(fù)時(shí)將舊數(shù)據(jù)的特定字段更新為新數(shù)據(jù)對應(yīng)字段的值時(shí)。merge_into 方法更適合。

5 merge_into 方法

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

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

columns 為空時(shí),將取第一條數(shù)據(jù)的所有鍵,此時(shí)請確保所有數(shù)據(jù)鍵相同。

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

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

6 replace_into 方法

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

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

data_1 = {"age": 44, 'name': "雷東寶","id":22539}
data_2={"age": 22, 'name': "宋運(yùn)萍","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 參數(shù)只接受傳入字典。該方法 返回的是影響的條數(shù)

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

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

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

用于通過主鍵去更新數(shù)據(jù)。pri_value 即為主鍵的值。primary 為主鍵,默認(rèn)為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'):
	"""
	通過主鍵刪除數(shù)據(jù)
	"""

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


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

9 使用 事務(wù)

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

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

如果sql 不需要參數(shù)也要傳入 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)          #返回最后一條執(zhí)行語句的 結(jié)果和影響條數(shù)

10 讀取流式游標(biāo)結(jié)果

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

cursor_type 可選 ss 和 ssdict

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

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

以上就是python開發(fā)一款操作MySQL的小工具的詳細(xì)內(nèi)容,更多關(guān)于python 操作MySQL的資料請關(guān)注腳本之家其它相關(guān)文章!

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用python開發(fā)一款操作MySQL的小工具》,本文關(guān)鍵詞  用,python,開發(fā),一款,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用python開發(fā)一款操作MySQL的小工具》相關(guān)的同類信息!
  • 本頁收集關(guān)于用python開發(fā)一款操作MySQL的小工具的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成人搞黄视频| 九义人在线观看完整免费版电视剧| 国产乱了高清露脸对白| 色琪琪综合男人的天堂aⅴ视频| 少妇性饥渴无码a区免费| 中文字幕有码在线视频| 亚洲高清免费| 亚洲国产精品影视| 亚洲欧美影院| 欧美美女一区二区| 麻豆影院在线观看| 91成人免费在线| 天天操天天摸天天舔| 91精品综合视频| 美女诱惑一区| 精品国产乱码久久久久夜深人妻| 欧亚精品中文字幕| 久久先锋影音| 香蕉久久一区二区不卡无毒影院| 免费视频久久| 国产亚洲色婷婷久久99精品| 一区二区三区在线视频观看| 日韩专区欧美专区| 精品国产依人香蕉在线精品| 国产精品一区二区久久精品爱涩| 日韩成人短视频| 91精品国产综合久久香蕉| 久久视频免费在线播放| 免费看成人人体视频| 午夜爽爽视频| 亚洲二区在线播放| 秋霞午夜av一区二区三区| 一本色道久久综合亚洲精品婷婷| 一二三四区在线| 二区视频在线| 日韩免费特黄一二三区| 亚洲午夜激情免费视频| 最新黄色av网址| 视频一区中文字幕精品| 一本免费视频| 免费男女羞羞的视频网站中文子暮| 亚洲美女自拍视频| 亚洲天堂av女优| 国产伦精品一区二区免费| 精品伦一区二区三区| 精品一区二区三区四| 可以在线看的黄色网址| 欧美性猛交xx| 激情av在线| 欧美一区二区三区小说| 先锋影音男人av资源| 欧美激情二区三区| av电影在线播放高清免费观看| 色偷偷亚洲女人天堂观看欧| 亚洲欧洲av一区二区| 国产片一区二区三区| 91精品国产麻豆国产自产在线| 国产精品无码一本二本三本色| 日韩成人在线资源| 国产一级片子| 综合天天久久| 亚洲午夜在线观看| 91九色视频在线观看| 国产美女在线观看| 亚洲免费影视第一页| 老湿机69福利| 国产麻豆剧果冻传媒视频杜鹃| 国产精品视频白浆免费视频| aaa国产精品视频| 麻豆一区产品精品蜜桃的特点| 成人一级福利| 亚洲精品乱码久久久久久金桔影视| 欧美视频免费在线观看| brazzers欧美最新版视频| 欧美电影免费网站| 国产在线不卡一卡二卡三卡四卡| 国产精品福利在线观看播放| 91在线小视频| 亚洲欧美成人一区二区在线电影| 日韩午夜影院| 亚洲免费电影在线观看| 久久久久久**毛片大全| 毛片基地黄久久久久久天堂| 一色桃子久久精品亚洲| 国产免费无码一区二区视频| 在线免费观看视频| 成人av在线播放网站| 污污网站免费观看| 中文字幕一区二区三区四区免费看| 日韩免费观看高清完整版| 亚洲精品影院在线| 亚洲色图丝袜| 日本黄区免费视频观看| 欧美三级欧美成人高清www| 国产精品国产精品国产专区不卡| 粉嫩av一区二区| 中文字幕91视频| 成年美女网站| 欧美www视频在线观看| 国产精品扒开腿做爽爽爽的视频| 秋霞网一区二区| 中文字幕资源网在线观看| 在线成人激情黄色| 粉嫩av一区二区三区免费野| 日韩在线免费看| www.午夜精品| 亚洲护士老师的毛茸茸最新章节| av免费精品一区二区三区| 精品国产拍在线观看| 免费看国产片在线观看| 亚洲女人天堂| 日韩中文字幕免费视频| 国产精品自拍片| 亚洲大尺度视频在线观看| 翡翠波斯猫1977年美国| 中文字幕一区二区三区精品| 国产精品偷伦视频免费观看了| 亚洲视频播放| 日本亚洲欧美成人| 亚洲自拍在线观看| 99re6热在线精品视频| 久草热在线观看| 国产乱码精品一区二区三区精东| 中文字幕一区二区精品| 一区二区免费在线| 亚洲一区二区免费视频| 黄色片免费在线观看| 亚洲精品国产一区二区精华液| 欧美成人se01短视频在线看| 在线日韩av| 香蕉视频色版| 国产欧美一区二区精品忘忧草| 一日本道久久久精品国产| 亚洲精品wwwww| 北条麻妃99精品青青久久| 日韩欧美精品电影| 91精品国产乱码久久| 亚洲午夜久久久久| 曰本一区二区三区视频| 亚洲精品免费播放| 天天色综合av| 欧美成人女星排名| 国外男同性恋在线看| www.国产福利| 久久精品无码一区二区三区毛片| 天海翼在线观看视频| 亚洲成年人电影| 久久亚洲精精品中文字幕早川悠里| 中文字幕你懂得| 欧美xxxxx精品| 羞羞视频免费| 俺去啦;欧美日韩| 国产欧美精品国产国产专区| 黄毛片在线观看| 午夜裸体女人视频网站在线观看| jk漫画禁漫成人入口| 亚洲国产毛片aaaaa无费看| 久久久久在线| 成人亚洲欧美日韩在线观看| xxx电影网| 你懂的成人av| 蜜臀久久99精品久久久久宅男| 国产在线98福利播放视频| 国产精品美日韩| 日韩高清在线| 可以看毛片的网址| 性开放的欧美大片| 日韩高清在线一区二区| 在线看小视频| 91麻豆.com| 中文文字幕一区二区三三| 亚洲国产免费看| 男人日女人网站| 成人动漫在线观看视频| 岛国精品在线| 最新福利小视频在线播放| 性xxxxxxxxx18欧美| 亚洲成人在线观看视频| 99视频在线免费观看| 波多野结衣视频在线看| 日本久久久久久久久久久| 91久久久久久久| 国产99久久久国产精品免费看| 国产成免费视频| 国产人成精品| 中文字幕人妻一区| 亚洲一区电影在线观看| 久久久噜久噜久久综合| 波多野结衣网站| 在线中文字幕日韩| 一级黄色片网站| 操人视频在线观看| 最近国语视频在线观看免费播放| 欧美高清xxxxxkkkkk| 国产区视频在线观看| 波多野结衣中文字幕一区二区三区| 国产女人18水真多18精品一级做| 久久精品国内一区二区三区水蜜桃| 狂野欧美性猛交xxxx| 亚洲欧美精品一区| 欧美人与禽zozzo禽性配| 亚洲精品影视在线观看| 最近中文字幕在线免费观看| 亚洲欧美资源在线| 99精品视频在线观看免费| 成人在线免费视频观看| 亚洲五月综合| 国产一区二区三区四区老人| 美女脱光内衣内裤| 果冻天美麻豆一区二区国产| 中文字幕一区二区三三| 国产午夜精品久久久久| 午夜久久福利视频| 可以免费看av的网址| 欧美老女人在线视频| 亚洲国产午夜伦理片大全在线观看网站| 欧美做受xxxxxⅹ性视频| 天堂在线观看一卡二卡三卡四卡| 久久丫精品忘忧草西安产品| 亚洲欧美视频在线观看| 色偷偷精品视频在线播放| 日韩小视频网址| 天堂av在线免费| 成年人在线网站| 91香蕉国产视频| 最近看过的日韩成人| 一区二区中文视频| 欧美人成在线视频| 亚洲第一福利社区| 日本中文字幕久久看| 在线亚洲免费视频| 国产调教在线| 国产精品婷婷午夜在线观看| 成人无号精品一区二区三区| 欧美日韩国产色视频| 国产精品久久久久久久免费软件| 亚洲激情在线观看视频| 日本男人天堂网| 日韩毛片在线播放| 日本美女黄色一级片| 一本久久综合亚洲鲁鲁| 成人精品鲁一区一区二区| 日日摸夜夜夜夜夜添| 精品高清视频| av爱爱亚洲一区| 日韩欧美二区三区| 成人国内精品久久久久一区| 久久久精品999| 国产v片免费观看| 日韩亚洲精品在线| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲黄色片网站| 天天操天天爱天天干| 美女啪啪无遮挡免费久久网站| xxx性欧美在线| 你懂的网站在线播放| 亚洲一区二区影院| 天天色棕合合合合合合合| 国产精品夜间视频香蕉| 99精品视频在线观看免费播放| 高清av一区二区| 亚洲精品一区二区三区蜜桃下载| 亚洲人www| 日本成人a视频| 免费91麻豆精品国产自产在线观看| 一区二区三区日韩精品视频| 精彩视频一区二区| 日韩中文字幕精品| 无遮挡又色又刺激的女人视频| 久久日一线二线三线suv| 久久精品国产欧美亚洲人人爽| 艳母动漫在线观看| 国产成人一二| 少妇高潮喷水在线观看| 亚洲片av在线| 欧美国产精品劲爆| 精品69视频一区二区三区| 性做久久久久久免费观看| 99国产精品私拍| 麻豆av免费看| 亚洲乱码国产一区三区| 四虎影视精品永久在线观看| 国产精品传媒在线| 成人国产精品av| 日韩视频免费观看高清完整版| 免费激情网址| 在线手机福利影院| 欧美精彩一区二区三区| 91精品婷婷国产综合久久竹菊| palipali轻量版永久网页入口| 国内精品麻豆| 欧美绝顶高潮抽搐喷水合集| 国产精品欧美久久久久天天影视| 国产裸舞福利在线视频合集| 国产国产精品| 亚洲欧美国产精品专区久久| 免费日韩一区二区三区| 日韩欧美极品在线观看| 亚洲激情男女视频| 天天干在线观看| 国产精品又粗又长| 国产成人精品一区二区| 亚洲国产精品第一区二区三区| 午夜国产精品视频免费体验区| www.亚洲免费| 久久se精品一区精品二区| 成年人在线免费观看| 啦啦啦免费高清视频在线观看| 人妻av无码一区二区三区| 久久精品国产亚洲精品2020| 女同性恋一区二区三区| 精品国产免费观看一区| 同性视频网站免费男| 国内成人精品2018免费看| 国产精品久久一区主播| 不卡视频一区二区三区| 26uuu亚洲综合色欧美| 中文字幕一区日韩精品欧美| 久久国产精品免费一区| 91久久爱成人| 涩涩屋成人免费视频软件| 国产激情一区二区三区四区| 亚洲欧洲精品成人久久奇米网| 91精品国产高清一区二区三密臀| 午夜精品在线观看| 91亚洲精选| 久久九九热re6这里有精品| 久久久久久久久久婷婷|