Python 替代 SQL bcp.exe

Python replacement for SQL bcp.exe

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

按照Pythonic的方法,尝试插入数据,如果类型不匹配或其他,请SQL服务器抛出异常。

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

下面是我将计算机上的 header '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})

通知:

  1. 获取 Portal 上的连接字符串。
  2. UID 格式如 [username]@[servername].

运行 这个脚本有效:

请参考这些文件:

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

希望这对您有所帮助。