将预定的日期时间值插入 SQL 表

Posted

技术标签:

【中文标题】将预定的日期时间值插入 SQL 表【英文标题】:Inserting a predetermined datetime value into SQL table 【发布时间】:2017-02-07 22:49:55 【问题描述】:

问题:如何将日期时间值插入 MS SQL 服务器,给出以下代码?

上下文:

我有一个 Python 中的二维列表(即列表列表),我想将它上传到 Microsoft SQL Server 2008 中的一个表中。对于这个项目,我使用的是 Python 的 pymssql 包。每个列表中的每个值都是一个字符串,但第一个元素除外,它是一个日期时间值。 这是我的代码的读取方式:

import pymssql

db_connect = pymssql.connect( # these are just generic names
    server = server_name,
    user = db_usr,
    password = db_pwd,
    database = db_name
    )

my_cursor = db_connect.cursor()
for individual_list in list_of_lists:
    # the first value in the paranthesis should be datetime 
    my_cursor.execute("INSERT INTO [DB_Table_Name] VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", tuple(individual_list))
    db_connect.commit()

python 解释器很难插入我的日期时间值。我知道目前我有%s,它是一个字符串格式化程序,但我不确定我应该为datetime 使用什么,这是数据库第一列的格式。

“列表列表”如下所示(每个列表转换为元组之后):

[(datetime.datetime(2012, 4, 1), '1', '4.1', 'hip', 'A1', 'J. Smith', 'B123', 'XYZ'),...]

下面是表格的示意图:

+-----------+------+------+--------+-------+-----------+---------+---------+
|    date   | step | data |  type  |   ID  |  contact  | notif.  | program |
+-----------+------+------+--------+-------+-----------+---------+---------+
|2012-04-01 |   1  | 4.1  |   hip  |   A1  | J. Smith  |   B123  |   XYZ   |
|2012-09-05 |   2  | 5.1  |   hip  |   A9  | B. Armst  |   B123  |   ABC   |
|2012-01-16 |   5  | 9.0  | horray |   C6  | F. Bayes  |   P995  |   XYZ   |
+-----------+------+------+--------+-------+-----------+---------+---------+

提前谢谢你。

【问题讨论】:

你能显示表格中的列和列表中的示例数据吗? @vkp 在上面看到我的编辑-谢谢! 您的代码在我看来是合理的。问题是如何表现出来的?错误信息?插入了意外的日期值? ...? 【参考方案1】:

我会尝试在插入之前将日期时间格式化为“yyyymmdd hh:mm:ss”。使用您正在执行的操作,SQL 将解析字符串,因此我还将构建整个字符串,然后将字符串作为变量插入。见下文

for individual_list in list_of_lists:
    # the first value in the parentheses should be datetime 
    date_time = individual_list[0].strftime("%Y%m%d %H:%M:%S")
    insert_str = "INSERT INTO [DB_Table_Name] VALUES (" + str(date_time) + "),(" + str(individual_list[1]) + ");"
    print insert_str
    my_cursor.execute(insert_str)
    db_connect.commit()

我为粗略的 python 道歉,但只要所有字段都匹配,SQL 应该喜欢该插入语句。如果不是,您可能需要在插入语句中指定这些值进入哪些字段。

让我知道这是否有效。

【讨论】:

这是网页抓取项目的一部分;我已经有了字符串格式的日期。问题是我正在使用的数据库的日期列格式为datetime。如果无法上传日期时间类型值,我只需创建一个新的数据库列作为“varchar”并将我拥有的内容上传为字符串。我想知道是否有办法将值作为日期时间值上传,而不是作为字符串。 没错。我不知道将 python 日期时间对象添加到 SQL 字段。它需要采用 SQL 在插入字符串中识别的日期时间格式。 (cc: @daOnlyBG) 方法是使用参数化查询crsr.execute("UPDATE table1 SET dtmcol=%s WHERE ID=%s", (datetime.datetime(2012, 11, 10), 3)) @GordThompson 我建议您将其发布为答案,而不是将其留在 cmets 中!

以上是关于将预定的日期时间值插入 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:将日期时间插入表中

MySQL PHP插入新行,其中rowNum列值始终按日期和时间按时间顺序排列

如何将日期值插入表中

C# 后台如何向SQL数据库中插入一定时间范围内的随机日期值,到日就可以!!

理货表在两个日期之间插入缺失的日期? SQL

如何用sql实现自动填充日期