SQL bcp.exe的Python替换

问题描述 投票:0回答:1

目标是直接从Python将csv文件加载到Azure SQL数据库,即不通过调用bcp.exe。 csv文件将具有与目标表相同数量的字段。不必创建bcp.exe要求的格式文件(16个独立表中的每个表都有+ -400字段的xml)将是一个很好的选择。

按照Python的方法,尝试插入数据,并要求SQL Server在类型不匹配或其他情况下引发异常。

python csv azure-sql-database bcp
1个回答
1
投票

如果您不想使用bcp cammand导入csv文件,则可以使用Python pandas库。

这是示例,我在计算机上将无标题'test9.csv'文件导入到Azure SQL数据库。

Csv文件:

enter image description here

Python代码示例:

import pandas as pd
import sqlalchemy
import urllib
import pyodbc

# set up connection to database (with username/pw if needed)
params = urllib.parse.quote_plus("Driver={ODBC Driver 17 for SQL Server};Server=tcp:***.database.windows.net,1433;Database=Mydatabase;Uid=***@***;Pwd=***;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;")

engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

# read csv data to dataframe with pandas
# datatypes will be assumed
# pandas is smart but you can specify datatypes with the `dtype` parameter
df = pd.read_csv (r'C:\Users\leony\Desktop\test9.csv',header=None,names = ['id', 'name', 'age'])

# write to sql table... pandas will use default column names and dtypes
df.to_sql('test9',engine,if_exists='append',index=False)

# add 'dtype' parameter to specify datatypes if needed; dtype={'column1':VARCHAR(255), 'column2':DateTime})

通知:

  1. 在门户网站上获取连接字符串。
  2. [UID格式类似于[username]@[servername]

运行此脚本,它可以工作:

enter image description here

请参考这些文件:

  1. HOW TO IMPORT DATA IN PYTHON
  2. pandas.DataFrame.to_sql

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.