亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pandas中read_sql使用參數(shù)進行數(shù)據(jù)查詢的實現(xiàn)

 更新時間:2022年06月17日 10:50:36   作者:飛羽喂馬  
本文主要介紹了pandas中read_sql使用參數(shù)進行數(shù)據(jù)查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

pandas.read_sql 可以在數(shù)據(jù)庫中執(zhí)行指定的SQL語句查詢或對指定的整張表進行查詢,以DataFrame 的類型返回查詢結果,這是在跟數(shù)據(jù)庫進行交互操作時很重要的一步——既讀取數(shù)據(jù),還返回DataFrame方便處理。

要解決的問題: 編寫過的SQL語句需要重復使用,這就涉及到參數(shù),使用參數(shù)來替換條件,然后根據(jù)需要替換參數(shù)。

一、之前的處理方法

在沒有使用參數(shù)之前,我一直使用的是正則法,也就是利用 re.sub 這個方法將需要的SQL內容替換掉,這樣的好處就是可以替換任意內容,缺點就是必須每次使用的時候 import re.sub。

    from re import sub
    import sqlalchemy
    import pandas as pd
    # 創(chuàng)建數(shù)據(jù)庫連接,這里使用的是pymysql
    engine = sqlalchemy.create_engine("mysql+pymysql://username:password@ip:port/store_name")
    sql = "select * from test where id = 'pid'"
    # 使用 sub 進行數(shù)據(jù)替換
    data = pd.read_sql(sub("pid", '1', sql), engine)

在這里使用的時候 pid 是為了統(tǒng)一處理才用的標識名,這樣在以后不管什么時候都只需要對 pid 進行替換即可。

有一點需要注意的是 sub 替換后的傳入是字符串,但是傳入到 替換到SQL中是不會變的。比如

sql = "select * from test where id = pid" data =
pd.read_sql(sub("pid", '1', sql), engine) 

進行 sub("pid", '1',> sql) 操作后 SQL 變成了

sql select * from test where id = 1

如果 id 字段是 int 類型那就沒問題,但是如果 id 字段是 char 或 varchar 等其他類型就會出現(xiàn)字段類型是字符串但給的是數(shù)字(mysql 很寬容,不一定會報錯,但是從數(shù)據(jù)類型上來說肯定是錯了)

二、使用 read_sql 中的 params 傳入?yún)?shù)

1.文檔說明

 pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)[source]

read_sql 方法中已經(jīng)有了 params 這個參數(shù),這個就是可以進行參數(shù)的傳遞,具體的描述如下

params : list, tuple or dict, optional, default: None
List of parameters to pass to execute method. The syntax used to pass parameters is database driver dependent. Check your database driver documentation for which of the five syntax styles, described in PEP 249’s paramstyle, is supported. Eg. for psycopg2, uses %(name)s so use params={‘name’ : ‘value’}

意思就是可以使用功能 list, tuple or dict 傳遞參數(shù),但是如何怎么設置參數(shù)和傳遞參數(shù)需要依據(jù)使用的數(shù)據(jù)庫引擎。PEP 249’s paramstyle 如下表

paramstyleMeaning
qmarkQuestion mark style, e.g. …WHERE name=?
numericNumeric, positional style, e.g. …WHERE name=:1
namedNamed style, e.g. …WHERE name=:name
formatANSI C printf format codes, e.g. …WHERE name=%s
pyformatPython extended format codes, e.g. …WHERE name=%(name)s

總結下就是在SQL語句中使用?, :1, :name, %s, %設置參數(shù),然后在params 使用 list, tuple or dict 進行參數(shù)的傳遞

2.具體的使用

    from re import sub
    import sqlalchemy
    import pandas as pd
    # 創(chuàng)建數(shù)據(jù)庫連接
    engine = sqlalchemy.create_engine("mysql+pymysql://username:password@ip:port/store_name")
    sql = "select * from test where id = %(pid)s"
    # 使用 params 進行參數(shù)傳遞
    data = pd.read_sql(sql, engine, params={'pid': '1'})

具體的參數(shù)就如上面代碼所示,使用了 %(pid)s 設置參數(shù),再用params={‘pid’: ‘1’}傳遞參數(shù),在Stack Overflow上有個提問也是關于這個的,里面還有關于psycopg2 和SQLite 的參數(shù)傳遞。

三、總結對比

之前沒有想過使用參數(shù),是因為在SQL中我不僅要替換固定條件,而且有時候需要替換大段的SQL,所以使用 sub 會更靈活也更模糊(傳入的是字符串,到了SQL里面數(shù)字還是字符串得再處理一遍),但是使用方法自帶的參數(shù)傳遞可以很明確的傳遞正確的數(shù)據(jù)和數(shù)據(jù)類型,而且不覺得使用方法自帶的參數(shù)傳遞很優(yōu)雅?

四、字符串的格式化

對于參數(shù)的傳遞還有另外一種就是python中的字符串格式化,format函數(shù)可以實現(xiàn)不帶參數(shù)、帶索引參數(shù)、帶關鍵字參數(shù),python的字符串格式化可以參考python格式化輸出
下面是format的使用示例

in : print("{one} are {two} {three}".format(one='you', two=1, three='pig'))
out: you are 1 pig

這里的1應該為a,但是為了演示傳遞整數(shù)參數(shù)

到此這篇關于pandas中read_sql使用參數(shù)進行數(shù)據(jù)查詢的實現(xiàn)的文章就介紹到這了,更多相關pandas read_sql查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python沖頂大會 快來答題!

    Python沖頂大會 快來答題!

    直播答題沖頂大會,你玩了嗎?本文為大家分享了10道Python測試題,你答對1道算我輸
    2018-01-01
  • Python中應用protobuf的示例詳解

    Python中應用protobuf的示例詳解

    這篇文章主要來和大家聊一聊?protobuf,它是一個數(shù)據(jù)序列化和反序列化協(xié)議,因此它和?json?的定位是一樣的。文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-02-02
  • Python中協(xié)程用法代碼詳解

    Python中協(xié)程用法代碼詳解

    這篇文章主要介紹了Python中協(xié)程用法代碼詳解,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 基于Python做一個簡單的動圖生成器

    基于Python做一個簡單的動圖生成器

    現(xiàn)在的年輕人都開始每天保溫杯里泡枸杞,這怎么能行呢?于是懷揣著愉悅心情的想法,我開始制作GIF動圖生成器,這個小工具制作的目的是為了將多張圖片組合后生成一張動態(tài)的GIF圖片,感興趣的可以嘗試一下
    2023-01-01
  • Python實現(xiàn)字符串模糊匹配方式

    Python實現(xiàn)字符串模糊匹配方式

    這篇文章主要介紹了Python實現(xiàn)字符串模糊匹配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python實現(xiàn)掃雷游戲

    python實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 從pandas一個單元格的字符串中提取字符串方式

    從pandas一個單元格的字符串中提取字符串方式

    今天小編就為大家分享一篇從pandas一個單元格的字符串中提取字符串方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python如何使用正則表達式爬取京東商品信息

    Python如何使用正則表達式爬取京東商品信息

    這篇文章主要介紹了Python如何使用正則表達式爬取京東商品信息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python利用Django如何寫restful api接口詳解

    Python利用Django如何寫restful api接口詳解

    這篇文章主要給大家介紹了關于Python利用Django如何寫restful api接口的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • python 命令行傳入?yún)?shù)實現(xiàn)解析

    python 命令行傳入?yún)?shù)實現(xiàn)解析

    這篇文章主要介紹了python 命令行傳入?yún)?shù)實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論