我可以使用以下脚本从jupyter笔记本成功连接到SQL Server Management Studio:
from sqlalchemy import create_engine
import pyodbc
import csv
import time
import urllib
params = urllib.parse.quote_plus('''DRIVER={SQL Server Native Client 11.0};
SERVER=SV;
DATABASE=DB;
TRUSTED_CONNECTION=YES;''')
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
举个例子,下面的脚本非常有效:
engine.execute("delete from table_name_X")
但是,我没能让下面的脚本工作。作为参考,当我在SQL Server Management Studio中执行其自适应时,它可以工作:
cde = 5
reportDate = df.loc[df.index[0],'Report Date'] # when you execute reportDate it returns 2019-11-15 00:00:00
req = "DELETE table_name_Y "
req+= "WHERE code = " + str(cde)
req+= " AND report_date = '" + str(reportDate.strftime('%Y-%m-%d')) + "'"
engine.execute(req)
根据错误消息,varchar到datetime的转换有问题,这导致值超出范围。但是,独立执行的脚本str(reportDate.strftime('%Y-%m-%d'))
可以工作。你知道吗
你能帮我理解为什么之前的脚本不起作用吗?你知道吗
正如@Ilja在对问题的评论中提到的,您确实不应该使用动态SQL来构造语句。它容易出错并且可能不安全。如果您使用适当的参数化查询许多问题就会消失。你知道吗
值得一提的是,这对我很有用:
相关问题 更多 >
编程相关推荐