[英]using BULK INSERT via Python
我在拆分 bulk-insert 的值時遇到問題,因為我的想法是每次每 10 個值插入 1 個並讀取 CSV 文件的全部內容
代碼已經插入到讀取整個 CSV 文件的單行中,但是在將來一次插入 10000 個值的情況下,我無法執行 VALUES 的除法。
def bulk_insert(table_name, **kwargs):
mysqlConnection = MySqlHook(mysql_conn_id='id_db')
a = mysqlConnection.get_conn()
c = a.cursor()
with open('/pasta/arquivo.csv') as f:
reader = csv.reader(f, delimiter='\t')
sql ="""INSERT INTO user (id,user_name) VALUES"""
for row in reader:
sql +="(" + row[0] + " , '" + row[1] + "'),"
c.execute(sql[:-1])
a.commit()
像這樣的東西應該可以工作。 batch_csv
function 是一個生成器,它在每次迭代時生成大小size
的行列表。
bulk_insert function 被修改為使用參數替換和游標的executemany
方法。 參數替換比手動構造 SQL 更安全。
cursor.executemany
可以像在原始 function 中一樣批處理 SQL 插入,盡管這取決於實現並且應該進行測試。
def batch_csv(size=10):
with open('/pasta/arquivo.csv') as f:
reader = csv.reader(f, delimiter='\t')
batch = []
for row in reader:
batch.append(row)
if len(row) == size:
yield batch
del batch[:]
yield batch
def bulk_insert(table_name, **kwargs):
mysqlConnection = MySqlHook(mysql_conn_id='id_db')
a = mysqlConnection.get_conn()
c = a.cursor()
sql ="""INSERT INTO user (id,user_name) VALUES (%s, %s)"""
batcher = batch_csv()
for batch in batcher:
c.executemany(sql, [row[0:2] for row in batch])
a.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.