2 回答
TA贡献1821条经验 获得超4个赞
对于这样的任务,您不想逐行插入数据:) 基本上,您有两种方法:
确保 sqlalchemy 不会一一运行查询。请改用 BATCH
INSERT
查询(如何在 MySQL 中进行批量插入)。以您需要的方式按摩您的数据,然后将其输出到某个临时 CSV 文件中,然后
LOAD DATA [LOCAL] INFILE
按照上述建议运行。如果您不需要预处理数据,只需将 CSV 提供给数据库(我假设它是 MySQL)
TA贡献2011条经验 获得超2个赞
遵循以下三个步骤
使用要保存到的表的名称保存 CSV 文件。
执行下面的python脚本来动态创建一个表(更新CSV文件名,db参数)
执行“mysqlimport --ignore-lines=1 --fields-terminated-by=, --local -u dbuser -p db_name dbtable_name.csv”
蟒蛇代码:
import numpy as np
import pandas as pd
from mysql.connector import connect
csv_file = 'dbtable_name.csv'
df = pd.read_csv(csv_file)
table_name = csv_file.split('.')
query = "CREATE TABLE " + table_name[0] + "( \n"
for count in np.arange(df.columns.values.size):
query += df.columns.values[count]
if df.dtypes[count] == 'int64':
query += "\t\t int(11) NOT NULL"
elif df.dtypes[count] == 'object':
query += "\t\t varchar(64) NOT NULL"
elif df.dtypes[count] == 'float64':
query += "\t\t float(10,2) NOT NULL"
if count == 0:
query += " PRIMARY KEY"
if count < df.columns.values.size - 1:
query += ",\n"
query += " );"
#print(query)
database = connect(host='localhost', # your host
user='username', # username
passwd='password', # password
db='dbname') #dbname
curs = database.cursor(dictionary=True)
curs.execute(query)
# print(query)
- 2 回答
- 0 关注
- 170 浏览
添加回答
举报