使用 pyodbc 将带日期的数据上传到 MS Access 数据库

Posted

技术标签:

【中文标题】使用 pyodbc 将带日期的数据上传到 MS Access 数据库【英文标题】:uploading data with dates to MS Access database with pyodbc 【发布时间】:2016-01-21 16:16:19 【问题描述】:

我正在尝试使用 Python 中的 pyodbc 库将带有日期的数据插入 MS Access。我的表有 3 个字段:日期(日期/时间)、1Y(数字)和 2Y(数字)。我知道问题不是连接问题,因为我可以在没有 Date 字段的情况下成功插入。例如,这有效:

cursor.execute("insert into test(1Y,2Y) values (?,?)",'3','4')

现在包括日期,我试过了:

cursor.execute("insert into test(Date,1Y,2Y) values (?,?,?)",'2010-01-01','3','4')
cursor.execute("insert into test(Date,1Y,2Y) values (?,?,?)",date(2010,1,1),'3','4')
cursor.execute("insert into test(Date,1Y,2Y) values (?,?,?)",'1/1/2010','3','4')

对于上述日期示例,我收到以下错误: ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句中的语法错误。(-3502) (SQLExecDirectW)')

我正在使用 Python 2.7、MS Access 2013、pyodbc 2.7。谢谢。

【问题讨论】:

请格式化您的代码.. Date 是reserved word,您需要对其进行转义才能将其用作列名。 @mata 就是这样,一旦重命名日期,上述所有三个版本都可以工作。谢谢。 【参考方案1】:

要在 Access SQL 中使用 reserved word (如 Date)作为列名或表名,必须将其括在方括号中,例如,

INSERT INTO TableName ([Date]) VALUES ...

【讨论】:

【参考方案2】:

如果 Python 为您处理限定字段,这可能不适用于 Python,但是,在某些其他语言中,要在 Access 表中插入日期值,您需要使用 # 字符来限定它们,即 #01/21/2016#。

【讨论】:

以上是关于使用 pyodbc 将带日期的数据上传到 MS Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章

pyodbc - 使用默认值将列添加到 MS Access

使用 Pyodbc 连接到具有用户定义函数的 MS Access 文件

无法使用 pyodbc 查询中的日期

Python pyodbc 连接到 ms 访问数据库

在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误

在 ms 访问中看不到由 pyodbc 创建的表