欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas之to_sql()插入數(shù)據(jù)到mysql中所遇到的問題及解決

 更新時(shí)間:2023年06月21日 14:49:03   作者:肖永威  
這篇文章主要介紹了Pandas之to_sql()插入數(shù)據(jù)到mysql中所遇到的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

to_sql()插入數(shù)據(jù)到mysql中所遇到的問題

使用pymysql驅(qū)動API,出現(xiàn)如下錯誤:

DatabaseError: Execution failed on sql ‘SELECT name FROM sqlite_master WHERE type=‘table’ AND name=?;’: not all arguments converted during string formatting

1. pandas的數(shù)據(jù)表插入數(shù)據(jù)到mysql中所遇到的問題

1.1. pymysql驅(qū)動接口問題

根據(jù)以往經(jīng)驗(yàn),mysql操作很簡單,安裝pymysql驅(qū)動即可。

pip install pymysql

編寫了通過pandas的to_sql寫入數(shù)據(jù)庫的代碼。

import pandas as pd
import datetime
import uuid  # 數(shù)據(jù)庫主鍵唯一
import pymysql
def mysql_db():
    # 連接數(shù)據(jù)庫肯定需要一些參數(shù)
    conn = pymysql.connect(
        host="192.168.**.**",
        port=3306,
        database="M*****DB",
        charset="utf8",
        user="ty",
        passwd="****"
    )
    return conn
# df = 略去
# 增加唯一主鍵uuid
id = []
for i in range(len(df)):
    id.append(uuid.uuid1())
# 增加記錄寫入時(shí)間
df['CreateTime'] = datetime.datetime.now()
df['id'] = id
# 下面是出現(xiàn)問題的地方
conn = mysql_db()
tablename = '******'
dd = df[colsname]
# 浮點(diǎn)型截?cái)鄶?shù)據(jù)處理
for k,v in cols_len.items():
    dd[k] = dd[k].round(v)
# 下面是出現(xiàn)問題的地方
dd.to_sql(tablename, conn,index=False, if_exists='append')

執(zhí)行程序,報(bào)出如下問題:

DatabaseError: Execution failed on sql ‘SELECT name FROM sqlite_master WHERE type=‘table’ AND name=?;’: not all arguments converted during string formatting

嘗試執(zhí)行查詢語句:

df0=pd.read_sql('select * from S*******y',conn)
df0

一切很正常,結(jié)果如下:

1.2. 關(guān)于數(shù)據(jù)庫主鍵

主鍵一般使用uuid,python中的uuid模塊基于信息如MAC地址、時(shí)間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來uuid。

具體方法有如下幾個(gè):

  • uuid.uuid1():基于MAC地址,時(shí)間戳,隨機(jī)數(shù)來生成唯一的uuid,可以保證全球范圍內(nèi)的唯一性。
  • uuid.uuid2():算法與uuid1相同,不同的是把時(shí)間戳的前4位置換為POSIX的UID。不過需要注意的是python中沒有基于DCE的算法,所以python的uuid模塊中沒有uuid2這個(gè)方法。
  • uuid.uuid3(namespace,name):通過計(jì)算一個(gè)命名空間和名字的md5散列值來給出一個(gè)uuid,所以可以保證命名空間中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。其中,namespace并不是一個(gè)自己手動指定的字符串或其他量,而是在uuid模塊中本身給出的一些值。比如uuid.NAMESPACE_DNS,uuid.NAMESPACE_OID,uuid.NAMESPACE_OID這些值。這些值本身也是UUID對象,根據(jù)一定的規(guī)則計(jì)算得出。
  • uuid.uuid4():通過偽隨機(jī)數(shù)得到uuid,是有一定概率重復(fù)的
  • uuid.uuid5(namespace,name):和uuid3基本相同,只不過采用的散列算法是sha1。

使用時(shí),按數(shù)據(jù)集中的記錄數(shù),一次性生成uuid列表,并入到表中。

2. pandas的to_sql()有個(gè)隱藏的坑

解決辦法

查了pandas官網(wǎng)和其他不少有關(guān)to_sql的文章,都沒有看到有提及數(shù)據(jù)庫連接這個(gè)坑,不過在pandas官網(wǎng)的to_sql例子和其他文章的to_sql中都有一個(gè)共同點(diǎn),就是引用sqlalchemy這個(gè)第三方ORM庫來進(jìn)行連接的,據(jù)此解決to_sql這個(gè)報(bào)錯。

首先,安裝 sqlalchemy。

pip install sqlalchemy

修改代碼,增加函數(shù):

def mysql_engine_db():
    # 連接數(shù)據(jù)庫肯定需要一些參數(shù)
    engine = create_engine(
        'mysql+pymysql://ty:***@192.168.**.**:3306/M*******DB'
        # mysql+pymysql://用戶: 密碼@url: 端口/數(shù)據(jù)庫
    )
    return engine
# 下面是出現(xiàn)問題的地方
engine= mysql_engine_db()
tablename = '******'
dd = df[colsname]
# 浮點(diǎn)型截?cái)鄶?shù)據(jù)處理
for k,v in cols_len.items():
    dd[k] = dd[k].round(v)
# 下面是出現(xiàn)問題的地方
dd.to_sql(tablename, engine,index=False, if_exists='append')   

如此簡單的解決問題!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中struct模塊對字節(jié)流/二進(jìn)制流的操作教程

    Python中struct模塊對字節(jié)流/二進(jìn)制流的操作教程

    最近在學(xué)習(xí)python網(wǎng)絡(luò)編程這一塊,在寫簡單的socket通信代碼時(shí),遇到了struct這個(gè)模塊的使用,當(dāng)時(shí)不太清楚這到底有和作用,后來查閱了相關(guān)資料大概了解了,這篇文章就主要介紹了Python中struct模塊對字節(jié)流/二進(jìn)制流的操作,需要的朋友可以參考借鑒。
    2017-01-01
  • 深入理解python try異常處理機(jī)制

    深入理解python try異常處理機(jī)制

    下面小編就為大家?guī)硪黄钊肜斫鈖ython try異常處理機(jī)制。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python中NumPy的數(shù)組拆分

    Python中NumPy的數(shù)組拆分

    這篇文章主要介紹了Python中NumPy的數(shù)組拆分,我們使用array_split()分割數(shù)組,將要分割的數(shù)組和分割數(shù)傳遞給它,如果將一個(gè)數(shù)組拆分為 3 個(gè)數(shù)組,則可以像使用任何數(shù)組元素一樣從結(jié)果中訪問它們,需要的朋友可以參考下
    2023-07-07
  • 帶你精通Python正則表達(dá)式

    帶你精通Python正則表達(dá)式

    本文將給大家分享一份關(guān)于比較詳細(xì)的Python正則表達(dá)式寶典,學(xué)會之后你將對正則表達(dá)式達(dá)到精通的狀態(tài),一起來學(xué)習(xí)下面內(nèi)容吧
    2021-08-08
  • 值得收藏,Python 開發(fā)中的高級技巧

    值得收藏,Python 開發(fā)中的高級技巧

    這篇文章主要介紹了Python 開發(fā)中的高級技巧,非常不錯,具有收藏價(jià)值,感興趣的朋友一起看看吧
    2018-11-11
  • PyTorch中torch.no_grad()用法舉例詳解

    PyTorch中torch.no_grad()用法舉例詳解

    這篇文章主要介紹了PyTorch中torch.no_grad()用法的相關(guān)資料,torch.no_grad()是PyTorch的上下文管理器,用于臨時(shí)禁用自動梯度計(jì)算,減少內(nèi)存消耗并加快計(jì)算速度,它適用于模型評估或推理階段,可以顯著提高效率,需要的朋友可以參考下
    2024-09-09
  • Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Matplotlib能夠繪制折線圖、散點(diǎn)圖、柱狀圖、直方圖、餅圖. 我們需要知道不同的統(tǒng)計(jì)圖的意義,以此來決定選擇哪種統(tǒng)計(jì)圖來呈現(xiàn)我們的數(shù)據(jù),今天就帶大家詳細(xì)了解如何繪制這些常用圖形,需要的朋友可以參考下
    2021-06-06
  • python操作音視頻ffmpeg-python對比pyav選擇

    python操作音視頻ffmpeg-python對比pyav選擇

    這篇文章主要介紹了python操作音視頻的選擇:ffmpeg-python對比pyav,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python解析基于xml格式的日志文件

    python解析基于xml格式的日志文件

    這篇文章主要為大家詳細(xì)介紹了python如何解析基于xml格式的日志文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Python實(shí)現(xiàn)對字符串的加密解密方法示例

    Python實(shí)現(xiàn)對字符串的加密解密方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)對字符串的加密解密方法,結(jié)合實(shí)例形式分析了Python使用PyCrypto模塊進(jìn)行DES加密解密的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04

最新評論