python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...
其他的SQL不清楚, pymysql是沒有類似函數的。
說到框架,python常用的幾個ORM, 我印象中也沒有提供類似寫法的。
既然沒人寫,而你又在php里覺得這么用趁手,不如自己按php的思路實現一個。
我自己寫了個database類和一些工具函數, 你說的邏輯在我這里的代碼大概這樣:
data = database('test_db').query_dict("SELECT * FROM `table`")
generic_insert(data, 'insert_table')
insert數據庫是在函數中寫死的。如果你有多個數據庫維護,可以考慮再抽象一下,在database類中實現。邏輯大概是:
# data is a dict
db = database('test_db').get_db()
db.insert(data, 'insert_table')
db.close()
分享自己用的insert函數。
from database import database
# 依賴pymysql
def generic_insert(data, target_table):
# 數據庫查出的字段不存在不規則字典的情況
# 但如果是mongo過來的不規則字典,則最好在插入前做數據清理
# 每20000條數據插入一次, 20000條數據預期為2-3M大小
# $todo: 根據mysql的driver, 按insert stmt的大小來決定插入, 防止insert過大
i = 0
count = 0
con = database('test_database').get_db()
cur = con.cursor()
key_name = data[0].keys()
while i < len(data):
subdata = [tuple(x.values()) for x in data[i:(i + 20000)]]
insert_stmt = "INSERT INTO `{target_table}` (`{colname}`) VALUES ({values})".format(
target_table=target_table,
colname="`,`".join(key_name),
values=','.join(['%s' for x in range(len(key_name))])
)
try:
rows= cur.executemany(insert_stmt, subdata)
count += rows
con.commit()
except Exception as e:
print('INSERT ROWS: {}'.format(count))
cur.close()
con.close()
raise e
i += 20000
cur.close()
con.close()
return count
總結
以上是生活随笔為你收集整理的python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql两个表查不同数据_产品操作MySQ
- 下一篇: python时钟罗盘酷炫代码_抖音上的时