【问题标题】:python Pyodbc, cant create a field named "Date" in the tablepython Pyodbc,无法在表中创建名为“Date”的字段
【发布时间】:2013-01-15 19:13:14
【问题描述】:

问题是我无法创建一个名为Date 的字段(我认为是因为它是一种类型) 任何想法如何做到这一点?

from pyodbc import connect
# database connect
conn = connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=test.mdb')
cursor = conn.cursor()
# sql query execute
query = "create table MyTable(name varchar(30), age integer , Date date)"
cursor.execute(query)
# commit changes             
conn.commit()
conn.close()

错误:

Traceback (most recent call last):
  File "\Path\to\myscript\test.py", line 9, in <module>
    cursor.execute(query)
ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in field definition. (-3553) (SQLExecDirectW)')

环境:Windows 7 64bit,Python 2.7 pyodbc-3.0.6.win-amd64-py2.7

【问题讨论】:

    标签: python windows ms-access pyodbc


    【解决方案1】:

    DATE 是 Access(和其他软件)中的 reserved word

    尝试用方括号 []Date 列名括起来,或者更好的是,想出一个不同的列名。

    ...
    query = "create table MyTable(name varchar(30), age integer , [Date] date)"
    ...
    

    【讨论】:

      【解决方案2】:

      用 ` 符号将名称括在反引号中。但是,我强烈建议将名称更改为其他名称以防止出现拼写错误。

      【讨论】:

      • MSFT Access 不使用括号[]
      • 是的,就是这样!括号不见了
      • 哦,完全错过了 MSFT 部分。
      【解决方案3】:

      你是对的,你不能创建一个与类型同名的列。如果您引用它,某些 RDBMS 将允许您这样做,即“..age integer, "Date" date)”(或正如其他人所说,反引号或方括号),但您也必须在所有查询中引用它。最好避免这种情况。

      请注意,这不是 python 问题,而是数据库服务器(似乎是 MS Access)的问题。 (准确地说,这不是数据库服务器的问题,它就是这样工作的。它与 python 无关。)

      【讨论】:

      • 感谢您的回答,是的,我以前试过!还有其他方法吗?因为在使用 MS Access 时可以创建字段“日期”!但从 python 我不能?!
      • 在 Access 中使用表设计器?它会为您放入括号。
      • 是的!我就是这么想的!
      猜你喜欢
      • 2014-04-19
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多