最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

pandas.read_sql 可以在數(shù)據(jù)庫(kù)中執(zhí)行指定的SQL語(yǔ)句查詢或?qū)χ付ǖ恼麖埍磉M(jìn)行查詢,以DataFrame 的類型返回查詢結(jié)果,這是在跟數(shù)據(jù)庫(kù)進(jìn)行交互操作時(shí)很重要的一步——既讀取數(shù)據(jù),還返回DataFrame方便處理。

要解決的問(wèn)題: 編寫(xiě)過(guò)的SQL語(yǔ)句需要重復(fù)使用,這就涉及到參數(shù),使用參數(shù)來(lái)替換條件,然后根據(jù)需要替換參數(shù)。

一、之前的處理方法

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

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

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

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

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

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

sql select * from test where id = 1

如果 id 字段是 int 類型那就沒(méi)問(wèn)題,但是如果 id 字段是 char 或 varchar 等其他類型就會(huì)出現(xiàn)字段類型是字符串但給的是數(shù)字(mysql 很寬容,不一定會(huì)報(bào)錯(cuò),但是從數(shù)據(jù)類型上來(lái)說(shuō)肯定是錯(cuò)了)

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

1.文檔說(shuō)明

 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 這個(gè)參數(shù),這個(gè)就是可以進(jìn)行參數(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ù)和傳遞參數(shù)需要依據(jù)使用的數(shù)據(jù)庫(kù)引擎。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

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

2.具體的使用

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

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

三、總結(jié)對(duì)比

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

四、字符串的格式化

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

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

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

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

相關(guān)文章

  • Python數(shù)據(jù)分析的八種處理缺失值方法詳解

    Python數(shù)據(jù)分析的八種處理缺失值方法詳解

    缺失值可能是數(shù)據(jù)科學(xué)中最不受歡迎的值,然而,它們總是在身邊。忽略缺失值也是不合理的,因此我們需要找到有效且適當(dāng)?shù)靥幚硭鼈兊姆椒?/div> 2021-11-11
  • python字典DICT類型合并詳解

    python字典DICT類型合并詳解

    這篇文章主要為大家詳細(xì)介紹了python字典DICT類型合并,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Python入門(mén)教程(四十一)Python的NumPy數(shù)組索引

    Python入門(mén)教程(四十一)Python的NumPy數(shù)組索引

    這篇文章主要介紹了Python入門(mén)教程(四十一)Python的NumPy數(shù)組索引,數(shù)組索引是指使用方括號(hào)([])來(lái)索引數(shù)組值,numpy提供了比常規(guī)的python序列更多的索引工具,除了按整數(shù)和切片索引之外,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引及花式索引,需要的朋友可以參考下
    2023-05-05
  • 對(duì)Python模塊導(dǎo)入時(shí)全局變量__all__的作用詳解

    對(duì)Python模塊導(dǎo)入時(shí)全局變量__all__的作用詳解

    今天小編就為大家分享一篇對(duì)Python模塊導(dǎo)入時(shí)全局變量__all__的作用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    這篇文章主要介紹了Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python 調(diào)試器pdb的簡(jiǎn)單使用

    python 調(diào)試器pdb的簡(jiǎn)單使用

    這篇文章主要介紹了python 調(diào)試器pdb的簡(jiǎn)單使用,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python?異步之如何啟動(dòng)獲取事件循環(huán)

    Python?異步之如何啟動(dòng)獲取事件循環(huán)

    這篇文章主要為大家介紹了Python?異步之如何啟動(dòng)獲取事件循環(huán)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 使用tkinter實(shí)現(xiàn)三子棋游戲

    使用tkinter實(shí)現(xiàn)三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了使用tkinter實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 黑科技 Python腳本幫你找出微信上刪除你好友的人

    黑科技 Python腳本幫你找出微信上刪除你好友的人

    黑科技,Python腳本幫你找出微信上刪除你好友的人,有興趣的朋友可以閱讀一下
    2016-01-01
  • python PyQt5 爬蟲(chóng)實(shí)現(xiàn)代碼

    python PyQt5 爬蟲(chóng)實(shí)現(xiàn)代碼

    這篇文章主要介紹了python PyQt5 爬蟲(chóng)實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

新兴县| 河池市| 泗水县| 湘乡市| 赣榆县| 沙雅县| 景德镇市| 鄂伦春自治旗| 宜宾县| 务川| 随州市| 翁牛特旗| 万宁市| 三都| 通山县| 遵义县| 德清县| 台山市| 永宁县| 清河县| 讷河市| 监利县| 正安县| 吴旗县| 桃园市| 托里县| 中西区| 宝坻区| 河北区| 本溪| 中宁县| 石河子市| 海晏县| 革吉县| 织金县| 凤庆县| 克拉玛依市| 平遥县| 沿河| 陆良县| 双峰县|