目标是直接从Python将csv文件加载到Azure SQL数据库,即不通过调用bcp.exe。 csv文件将具有与目标表相同数量的字段。不必创建bcp.exe要求的格式文件(16个独立表中的每个表都有+ -400字段的xml)将是一个很好的选择。
按照Python的方法,尝试插入数据,并要求SQL Server在类型不匹配或其他情况下引发异常。
如果您不想使用bcp cammand导入csv文件,则可以使用Python pandas
库。
这是示例,我在计算机上将无标题'test9.csv'文件导入到Azure SQL数据库。
Csv文件:
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})
通知:
UID
格式类似于[username]@[servername]
。运行此脚本,它可以工作:
请参考这些文件:
希望这会有所帮助。