【问题标题】:Date column error when insert into SQL Server using pyodbc使用 pyodbc 插入 SQL Server 时出现日期列错误
【发布时间】:2019-12-12 14:21:18
【问题描述】:

我有一个表Billing,其中有列

BILL_NO,CUSTOMER_NAME,PHONE_NO,BILLING_DATE,DELIVERY_DATE,TOTAL_AMOUNT

以下是推导billing_dateDelivery_date 日期的逻辑。

orderdate = datetime.datetime.now().date()

if deliverydate != '':

     deliverydate = datetime.datetime.strptime(deliverydate,'%d/%m/%Y').date()
else:
     deliverydate = datetime.date(9999,12,31)

假设 delivery_date 的值为 9999-12-31

我尝试将这些值加载到 SQL Server 中

ins_query = 'INSERT INTO dbo.BILLING VALUES(?,?,?,?,?,?)'

data = (billno,customername,phoneno,orderdate.strftime('%d/%m/%Y'),deliverydate.strftime('%d/%m/%Y'),totalamount)

cur.execute(ins_query,data)

但我收到以下关于日期列的错误

pyodbc.DataError: ('22007', '[22007]

[Microsoft][ODBC SQL Server Driver][SQL Server]转换失败时

从字符串转换日期和/或时间。 (241)

(SQLExecDirectW)')

如何格式化日期列以加载到 SQL Server。我希望以DD/MM/YYYYYYYY/MM/DD 格式将日期格式加载到数据库中

【问题讨论】:

  • BILLING_DATE 和 DELIVERY_DATE 有哪些数据类型?看来您应该将值插入为日期,而不是字符串...
  • SQL Server 以 2019-12-10 20:31:35.120 的格式存储日期。如果您想要不同的格式,您可以根据 BILLING 表创建一个视图并使用 FORMAT(BILLING_DATE, 'dd/MM/yyyy', 'en-US') docs.microsoft.com/en-us/sql/t-sql/functions/… 格式化日期
  • @bernie ,BILLING_DATE 和 DELIVERY_DATE 列是 DATE 数据类型。在这种情况下,我应该如何插入值?
  • @RSax ,这意味着在日期参数的数据中,而不是给出“,orderdate.strftime('%d/%m/%Y')”我必须给出 FORMAT(ORDER_DATE,'dd /MM/yyyy,'en-US')
  • @rvssankar:将日期插入为日期,而不是字符串。也就是说:不要在日期上执行.strftime()

标签: python sql-server sql-server-2012 pyodbc


【解决方案1】:

感谢大家的建议。问题是我使用了旧的 OBDC sql 服务器连接。正如@bernie 所说,我们需要通过删除.strptime() 来将日期作为日期传递。即使我们使用它,我们也需要在 pyodbc 连接中使用最新的 odbc 驱动程序。下面是解决问题的 odbc 驱动程序。

Microsoft ODBC Driver 17 for SQL Server

ins_query = 'INSERT INTO dbo.BILLING VALUES(?,?,?,?,?,?)'

data = (billno,customername,phoneno,orderdate,deliverydate,totalamount)

cur.execute(ins_query,data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2014-08-18
    • 1970-01-01
    • 2014-08-20
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多