【发布时间】:2019-10-21 11:50:43
【问题描述】:
以下代码尝试使用 pymssql 连接到 mssql 数据库。我有一个 CSV 文件,我正在尝试将所有行推送到 mssql 数据库中的单个数据表中。我在打开 CSV 文件后尝试执行代码时收到“KeyError”。
import csv
import pymssql
conn = pymssql.connect(host="host name",
database="dbname",
user = "username",
password = "password")
cursor = conn.cursor()
if(conn):
print("True")
else:
print("False")
with open ('path to csv file', 'r') as f:
reader = csv.reader(f)
columns = next(reader)
query = "INSERT INTO Marketing({'URL', 'Domain_name', 'Downloadables', 'Text_without_javascript', 'Downloadable_Link'}) VALUES ({%s,%s,%s,%s,%s})"
query = query.format(','.join('[' + x + ']' for x in columns), ','.join('?' * len(columns)))
cursor = conn.cursor()
for data in reader:
cursor.execute(query, tuple(data))
cursor.commit()
以下是我得到的错误:
KeyError: "'URL', 'Domain_name', 'Downloadables', 'Text_without_javascript', 'Downloadable_Link'"
使用 to_sql
file_path = "path to csv"
engine = create_engine("mssql://user:password@host/database")
df = pd.read_csv(file_path, encoding = 'latin')
df.to_sql(name='Marketing',con=engine,if_exists='append')
输出:
InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
【问题讨论】:
-
是python错误堆栈中的错误吗?你能更新更多 Python 抛出的错误吗?谢谢。
-
我最初的想法是你试图抛出一个元组。尝试一个列表。
-
另外,我们需要处理您的
data in readerfor 循环。您在哪里将值分配给query。我没看到。 -
查询似乎有点不必要的复杂?尝试将查询行移动到 for 循环中,使用 query = f"INSERT INTO TABLE ('URL', 'Domain_name', 'Downloadables', 'Text_without_javascript', 'Downloadable_Link') VALUES ({data[0]});"此外,如果 csv 不大,使用 pd.to_sql 会容易得多。
-
对于 pyodbc,您将需要 wiki github.com/mkleehammer/pyodbc/wiki/… 中描述的驱动程序参数。上面的查询字符串有帮助吗?
标签: sql-server python-3.x pymssql