gpt4 book ai didi

python - 如何使用批量插入将数据从 Dataframe 插入 SQL Server 表?

转载 作者:行者123 更新时间:2023-12-04 16:25:57 27 4
gpt4 key购买 nike

我是 Python 新手,所以寻求帮助。我在 S3 存储桶中有一个 csv 文件,我想使用 Python pyodbc 将此 csv 文件导入 SQL 服务器中的表。该文件为 50 MB(40 万条记录)。我的代码如下。正如我的代码如下所述,我的 csv 数据位于数据框中,如何使用批量插入将数据框数据插入到 sql server 表中。如果我的方法不起作用,请用不同的方法建议我。

# Connection to S3
s3 = boto3.client(
service_name = 's3',
region_name = 'us-gov-west-1',
aws_access_key_id = 'ZZZZZZZZZZZZZZZZZZ',
aws_secret_access_key = 'AAAAAAAAAAAAAAAAA')

# Connection to SQL Server
server = 'myserver.amazonaws.com'
path = 'folder1/folder2/folder3/myCSVFile.csv'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE=DB-staging;UID=User132;PWD=XXXXXX')
cursor = cnxn.cursor()

obj_sum = s3.get_object(Bucket = 'my_bucket', Key = path)
csv_data = pd.read_csv(obj_sum['Body'])
df = pd.DataFrame(csv_data, columns = ['SYSTEM_NAME', 'BUCKET_NAME', 'LOCATION', 'FILE_NAME', 'LAST_MOD_DATE', 'FILE_SIZE'])
#print(df.head(n=15).to_string(index=False))

# Insert DataFrame to table
cursor.execute("""truncate table dbo.table1""")
cursor.execute("""BULK INSERT dbo.table1 FROM """ + .....# what do I put here since data is in dataframe??)
我尝试遍历数据框,插入 5k 条记录花了 20 分钟。代码如下。循环遍历每条记录是一种选择,但效果不佳。这就是为什么我尽可能地转向批量插入的原因。
for i in df.itertuples(index = False):
if i.FILE_SIZE != 0:
cursor.execute("""insert into dbo.table1 (SYSTEM_NAME, BUCKET_NAME, X_LOCATION, FILE_NAME, LAST_MOD_DATE, FILE_SIZE)
values (?,?,?,?,?,?)""", i.SYSTEM_NAME, i.BUCKET_NAME, i.LOCATION, i.FILE_NAME, i.LAST_MOD_DATE, i.FILE_SIZE)
最后,奖金问题......我想检查我的数据框中的“FILE_SIZE”列是否等于0,如果它跳过该记录并前进到下一条记录。
谢谢你。

最佳答案

谢谢您的帮助。
使用 fast_executemany = True 为我完成了这项工作。

engine = sal.create_engine("mssql+pyodbc://username:password@"+server+":1433/db-name?driver=ODBC+Driver+17+for+SQL+Server?Trusted_Connection=yes", fast_executemany = True)
conn = engine.connect()
我不得不更改我的代码以使用“sqlalchemy”,但它现在工作得很好。
调用函数将数据上传到 SQL Server 如下:
df.to_sql(str, con = engine, index = False, if_exists = 'replace')

关于python - 如何使用批量插入将数据从 Dataframe 插入 SQL Server 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64201656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com