第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在不使用參數(shù)化查詢的情況下將數(shù)據(jù)從 CSV 插入 MySQL?

如何在不使用參數(shù)化查詢的情況下將數(shù)據(jù)從 CSV 插入 MySQL?

慕碼人2483693 2023-09-19 13:55:23
我使用巨大的 CSV 數(shù)據(jù)文件,并計(jì)劃在使用 Python 將數(shù)據(jù)逐行插入 MySQL 之前進(jìn)行一些檢查。由于數(shù)據(jù)文件非常大,打開文件需要花費(fèi)大量時(shí)間。因此我的目標(biāo)是加載它們而不手動(dòng)分析它們。我將使用 Python 來為我進(jìn)行分析。我已經(jīng)開始編寫代碼,但在插入數(shù)據(jù)時(shí)陷入困境。我確信這是一個(gè)基本問題,但我無法弄清楚,因?yàn)槲覍?duì) Python 有點(diǎn)陌生。演示數(shù)據(jù):id,first_name,last_name,email,boole,coin1,Emilio,Pettie,epettie0@craigslist.org,true,1Lj8Z4Em68hwqRAUXZKW7C7h2KgH5cGpTe2,Raynard,Fairholme,rfairholme1@wisc.edu,true,1AEwLuECKYD1Bb6EGaBQC1TJS1mtvHBmy33,Zonda,Bampkin,zbampkin2@google.nl,false,14AHvnRjXExdgfqZBnWUyVi7aWZR8SFBoL4,Thurstan,Sherville,tsherville3@umich.edu,true,19iiiJ53zxmJnbmW7gKH2hoMwpiaqkit8E5,Jonathan,Jewkes,jjewkes4@nba.com,false,18E22TTK68ukQVLWK6oZNfFbzP2uHqaW7o6,Dolores,Carmichael,dcarmichael5@blogtalkradio.com,false,15BBePy5J3WY1QQLTjA79iYQMjDRubv2BD7,Kleon,Wesker,kwesker6@buzzfeed.com,false,1NfYtAuq6M3cXGhDJuDBnCjdEBRSKsfRVJ8,Laureen,Writtle,lwrittle7@tripadvisor.com,true,14UgbrWz9wi2UptALs2dFeQRdUiMaLee579,Gypsy,Coombes,gcoombes8@home.pl,true,1Hn3JBtjytwbBMVJgM7ixAi1sXf56KFM3R10,Kevina,Boulger,kboulger9@sakura.ne.jp,false,1GABbcoRTVsX1qzD8uiGtsPtuD1kvzokK1代碼 :import stringimport csvimport mysql.connectormydb=mysql.connector.connect(host="localhost",user="root",password="password",autocommit=True)mycursor = mydb.cursor()sql_str=''sql_str1=''mycursor.execute("drop table if exists  rd.data")with open(r"C:\Users\rcsid\Documents\Office Programs\Working prog\MOCK_DATA.csv") as csvfile:    csv_reader = csv.DictReader(csvfile)    line_count = 0    for row in csv_reader:        if line_count == 0:            sql_str=f'create table rd.data ( {" varchar(50), ".join(row)} varchar(50))'            mycursor.execute(sql_str)        sql_str1=f'insert into rd.data values ( {", ".join(row)})'        print(sql_str1)        mycursor.execute(sql_str1)        line_count += 1并且插入的數(shù)據(jù)對(duì)于所有值都是空的。您能告訴我如何捕獲 csv 中的數(shù)據(jù)嗎?我知道這可能是基本語法。我也知道語法cur.execute('INSERT INTO table (columns) VALUES(%s, ....)', row) ,但不想使用它,因?yàn)槲倚枰蜷_文件來檢查標(biāo)題部分。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

我想不出您不應(yīng)該使用參數(shù)化查詢的充分理由。您已經(jīng)知道 CSV 標(biāo)題中的列名稱(并且您可能總是知道這一點(diǎn),否則您將如何創(chuàng)建表?),那么為什么不按照推薦的方式進(jìn)行操作呢?當(dāng)您這樣做時(shí),您已經(jīng)打開了該文件with open...并使用DictReader.?盡管它不是面向公眾的代碼,但如果 CSV 中存在類似 SQL 注入的元素,您的數(shù)據(jù)庫(kù)可能會(huì)崩潰。

DictReader作為字典讀取該行。當(dāng)您迭代字典時(shí),您得到的是它的鍵而不是它的值。另外,請(qǐng)記住,您想要將它們插入到 varchar 列中,因此您需要將它們括在'

你需要做

col_vals = ", ".join([f"'{v}'" for v in row.values()])

sql_str1=f'insert into rd.data values ({colvals})'

我強(qiáng)烈建議您使用如下參數(shù)來執(zhí)行此操作:


col_names = ",".join(row) # 'id,first_name,last_name,email,boole,coin'

params = ",".join("%s" for x in row) # '%s,%s,%s,%s,%s,%s'

query = f'insert into rd.data ({col_names}) values ({params})'

mycursor.execute(query, row.values())


查看完整回答
反對(duì) 回復(fù) 2023-09-19
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

因?yàn)槟?code>csv.DictReader可以輕松地從字典鍵中檢索列。事實(shí)上,此方法會(huì)跳過第一行。此外,請(qǐng)考慮executemany僅對(duì)兩個(gè)游標(biāo)調(diào)用進(jìn)行參數(shù)化:

with open(r"C:\Path\To\MOCK_DATA.csv") as csvfile:

? ? csv_reader = csv.DictReader(csvfile)

? ? data = [row for row in csv_reader]

? ??

? ? sql1 = f'CREATE TABLE rd.data ( {" VARCHAR(50), ".join(data[0].keys())} VARCHAR(50))'

? ? mycursor.execute(sql1)

? ? mydb.commit()


? ? sql2 = "INSERT INTO rd.data (`{cols}`) VALUES ({prms})"

? ? sql2 = sql2.format(cols="`, `".join(data[0].keys()),?

? ? ? ? ? ? ? ? ? ? ? ?prms=", ".join(['%s'] * len(data[0])))??

? ??

? ? mycursor.executemany(sql2, [list(d.values()) for d in data])

? ? mydb.commit()

Online Demo?(使用 SQLite 但應(yīng)與 MySQL 保持一致)



查看完整回答
反對(duì) 回復(fù) 2023-09-19
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

我能夠使用以下代碼解決該問題:


mycursor.execute("drop table if exists  rd.data_with_header")

#r"C:\Users\rcsid\Documents\Office Programs\Working prog\MOCK_DATA.csv"

#re.sub('[^a-zA-Z0-9]\n\.', '_', row)

reader = csv.DictReader(open(r"C:\Users\rcsid\Documents\Office Programs\Working prog\MOCK_DATA.csv",encoding='utf-8',errors='ignore'), delimiter=',')

rowHeaders = reader.fieldnames

print(rowHeaders)

for i in rowHeaders:

    field_name.append(re.sub('[^A-Za-z0-9]+', '_', i))

print(field_name)

print(f'''create table rd.data_with_header ( {" varchar(100), ".join(field_name)} varchar(100))''')

sql_str=f'''create table rd.data_with_header ( {" varchar(100), ".join(field_name)} varchar(100))'''

mycursor.execute(sql_str)

for row in reader:

    sql_str1=f'''insert into rd.data values ('{"',' ".join(row.values())}')'''

    print(sql_str1)

    mycursor.execute(sql_str1)


查看完整回答
反對(duì) 回復(fù) 2023-09-19
  • 3 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)