使用 pyodbc 从 Python 应用程序将值插入 Access 2003 数据库

2024-03-30

我过去经常检查 stackoverflow,并且总是能够找到我一直在寻找的东西,但我似乎无法让这个工作,所以我问我的第一个问题。

我并不是一个真正的程序员,但我在工作中提到过Python,现在我有一个Python项目。实际上,我已经把一切都弄清楚了,但是将值插入数据库却让我陷入了困境。

基本问题:

我有一个使用 Python 和 tkinter 构建的表单。当按下表单上的按钮时,我希望将值插入到数据库中。

细节:

我正在使用 Python 3.4、pyodbc 和 Access 2003 数据库。

该数据库只有 1 个名为 file_info 的表,它具有以下字段,字段数据类型列在管道后面。

身份证 |自动编号

文件名 |文本

日期 |约会时间

批量数量 |数字

包裹金额 |数字

总金额 |数字

最终我想插入一些在其他函数中计算的值,但目前我只是尝试通过函数插入一些设置值,但无法让它工作。

连接字符串:

db_file = r'''C:\Users\amarquart\Documents\testlockboxdb.mdb'''
user = 'admin'
password = ''
odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb,   
*.accdb)};DBQ=%s;UID=%s;PWD=%s' % \
(db_file, user, password)

conn = pyodbc.connect(odbc_conn_str)
cur = conn.cursor()     

该程序编译并运行良好,因此我假设错误与连接字符串无关。因此,这里是我在函数中使用的一些代码示例,但无济于事。

def insert_data():
    sql = '''INSERT INTO file_info
    (
      [ID],
      [date],
      [filename],
      [batches_amount],
      [parcels_amount],
      [sum_amount],
    )
    VALUES
    (
      '1',
      'test',
      '8/01/2014 1:00:00 PM',
      '1',
      '1',
      '1',
    );'''

    cur.execute(sql)

    conn.commit()
    cur.commit()
    conn.close()

这给出了这个错误:

Tkinter 回调中出现异常 回溯(最近一次调用最后一次): 文件“C:\Python34\lib\tkinter__init__.py”,第 1487 行,位于call返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 170 行,运行中 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 36 行,在 insert_data 中 cur.执行(sql) pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句中的语法错误。(-3502) (SQLExecDirectW)')

def insert_data():
    sql = ("""INSERT INTO [file_info] ([ID], [date], [filename], [batches_amount],     
         [parcels_amount], [sum_amount])
          VALUES (?, ?, ?, ?, ?, ?)""", [1, '8/01/2014 1:00:00 PM', 'test', 10, 4, 2])
    cur.execute(sql)

    conn.commit()
    cur.commit()
    conn.close()

给出这个错误:

Tkinter 回调中出现异常 回溯(最近一次调用最后一次): 文件“C:\Python34\lib\tkinter__init__.py”,第 1487 行,位于call返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 154 行,运行中 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 20 行,在 insert_data 中 cur.执行(sql) 类型错误:要执行的第一个参数必须是字符串或 unicode 查询。

def insert_data():
    sql = """
    INSERT INTO file_info (ID, date, filename, batches_amount, parcels_amount, sum_amount)
    VALUES (1, '8/01/2014 1:00:00 PM', 'test', 2, 2, 2)
    """ 
    cur.execute(sql)

    conn.commit()
    cur.commit()
    conn.close()    

给出与最后一个代码相同的错误

def insert_data():
   cur.execute("INSERT INTO file_info VALUES (AutoNumber, Text, Date/Time, Number,
               Number, Number)",
(1, 'test', '8/01/2014 1:00:00 PM', 2, 2, 2))
   conn.commit()
   cur.commit()
   conn.close()

给出了这个错误:

Tkinter 回调中出现异常 回溯(最近一次调用最后一次): 文件“C:\Python34\lib\tkinter__init__.py”,第 1487 行,位于call返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 153 行,运行中 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 19 行,在 insert_data 中 (1, '测试', '8/01/2014 1:00:00 PM', 2, 2, 2)) pyodbc.ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 6 个参数', 'HY000')

我猜我所尝试的一切都是极其不正确的,所以任何帮助将不胜感激。

感谢大家。

EDIT:

基于第一个响应的新尝试,唯一的区别是我使用三引号,因为代码跨越 2 行

cur.execute("""INSERT INTO file_info (ID, date, filename, batches_amount,   
parcels_amount, sum_amount) 
         VALUES (1, 'test', '8/01/2014 1:00:00 PM', 2, 2, 2)""")
conn.commit()

给出这个错误

Tkinter 回调中出现异常 回溯(最近一次调用最后一次): 文件“C:\Python34\lib\tkinter__init__.py”,第 1487 行,位于call返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 19 行,在 insert_data 中 值 (1, '测试', '8/01/2014 1:00:00 PM', 2, 2, 2)''') pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句中的语法错误。(-3502) (SQLExecDirectW)')

params = [(1, '8/01/2014 1:00:00 PM', 'test', 2, 2, 2)]
cur.executemany("""insert into file_info(ID, date, filename, batch_amount,   
parcel_amount, sum_amount)
                values (?, ?, ?, ?, ?, ?)""", params)
conn.commit()

给出这个错误

Tkinter 回调中出现异常 回溯(最近一次调用最后一次): 文件“C:\Python34\lib\tkinter__init__.py”,第 1487 行,位于call返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Gridtesting/Source/Gridtesting.py”,第 20 行,在 insert_data 中 值 (?, ?, ?, ?, ?, ?)""", 参数) pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]未实现可选功能 (106) (SQLBindParameter)')


几次尝试你都已经很接近了。Date is a 保留字 http://office.microsoft.com/en-us/access-help/access-2007-reserved-words-and-symbols-HA010030643.aspx在 Access 中,用方括号将列名括起来,并确保列的顺序与值的顺序匹配:

...
sql = """
INSERT INTO file_info (ID, [date], filename, batches_amount, parcels_amount, sum_amount)
VALUES (1, '8/01/2014 1:00:00 PM', 'test', 2, 2, 2)
""" 
cur.execute(sql)
....

根据 Gord 下面的评论,Access 支持参数化查询,因此理想的代码是:

....
params = (1, '8/01/2014 1:00:00 PM', 'test', 2, 2, 2)
sql = """
INSERT INTO file_info (ID, [date], filename, batches_amount, parcels_amount, sum_amount)
VALUES (?, ?, ?, ?, ?, ?)
""" 
cur.execute(sql, params)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyodbc 从 Python 应用程序将值插入 Access 2003 数据库 的相关文章

随机推荐

  • Rails 自定义配置返回空哈希

    我正在使用 Rails 4 并且我想使用自定义配置功能 如下所述 http guides rubyonrails org configuring html custom configuration http guides rubyonrai
  • 基于行内 NA 数量的条件行删除

    我希望根据以下两个条件从数据集中删除行 如果有 3 个连续单元格 则删除行NA or 如果有四个或更多单元格NA 我的样本数据 data lt rbind c 1 1 2 3 4 2 3 2 c NA 1 NA 4 1 1 NA 2 c 1
  • NSMenuItem 的选择器放置在哪里

    我试图理解 Cocoa 中的一些事情 但我陷入了一件事 我正在跟进简约的 Cocoa 编程 http cocoawithlove com 2010 09 minimalist cocoa programming html 那里有一个NSMe
  • 为什么我们要把一个mysql表分成许多更小的表?

    这似乎是一种常见的做法divide the data of one table into many databases many tables为了提高性能 我可以理解many databases部分原因是更多的数据库提供了更多的CPU 更多
  • matplotlib 补丁集合中的 Zorder 规范?

    我正在尝试绘制一系列矩形和圆形 其中圆形位于前景中 根据以下帖子 我必须设置 zorder 参数 我添加到图表中的补丁在 alpha 1 时不是不透明的 为什么 https stackoverflow com questions 53906
  • 使用复选框从 jquery 自动完成中选择多个选项

    我正在与jquery 自动完成 https jqueryui com autocomplete 我正在尝试以下代码 Html
  • 尝试保存其他实体时 Doctrine 事件侦听器中的无限循环

    我希望每次新的时候Distance保存实体 从 Place A 到 Place B 反向距离 从 Place B 到 Place A 也被插入到数据库中 https stackoverflow com q 30569463 2516943
  • 给定一个数字,找到与原始数字具有完全相同的数字组的下一个更高的数字

    我刚刚搞砸了一次面试 并且在面试问题上几乎取得了零进展 给定一个数字 找到下一个具有完全相同的数字 一组数字作为原始数字 例如 给出 38276 返回 38627 我想首先找到小于个位的第一个数字 从右侧 的索引 然后我会旋转子集中的最后一
  • android parse.com 保存安装错误。找不到要更新的对象

    我在下面收到此错误 但不知道该怎么办 我什至不知道要在这里发布什么代码 因为我似乎找不到代码中导致此错误的位置 还有一件更重要的事情要提 这个错误不会发生在我的第一个测试设备 运行 Android 4 0 4 的 HTC难以置信 上 但我的
  • Spring 返回 HTTP 406 的 JSON (NOT_ACCEPTABLE)

    Spring允许定义 ExceptionHandlers代替 RestControllerAdvice 我已经定义了很多其他的ExceptionHandlers其中适用于 HTTP 400 404 405 但是 HTTP 406 NOT A
  • 读取所有注册表值的快速方法

    我正在编写一个实用程序 需要创建 HKCR 中所有注册表值的列表 我使用递归函数来执行此操作 var list new Dictionary
  • jQuery 不调用 php

    由于某种原因 jQuery 没有加载我的 php 文件 单击该按钮 页面就会刷新 我已经验证 jQuery 可以正常工作 并且单击功能也可以正常工作 一旦到达 post它似乎没有调用该文件并经历暂停并回显结果 该目录对于 php 文件是正确
  • 获取最小时差

    我最近在一次编码面试中被问到这个问题 我得到了一系列 HH MM 格式的时间 我需要找到以分钟为单位的最小时差 时间本质上是循环的 因此 23 55 和 00 12 应该相差 17 该函数还需要将 00 00 处理为与 24 00 相同的东
  • 将文件从 HDFS 复制到本地计算机

    我在尝试将文件从 HDFS 文件系统 下载 到本地系统时遇到问题 即使相反的操作没有问题 注意 文件存在于 HDFS 文件系统的指定路径上 这是一个代码片段 Configuration conf new Configuration conf
  • 如何在 Typescript 中使用 Cytoscape.js 的 UI 扩展?

    是否可以在 Typescript 中使用 Cytoscape UI 扩展 可以使用布局扩展 但是当我需要时https github com cytoscape cytoscape js cxtmenu https github com cy
  • 在散景 vbar 工具提示中显示高度

    我想制作一些简单数据的条形图 例如像这样的 pandas 数据框 Cats 4 Dogs 3 Mice 27 我想要一个工具提示 当鼠标悬停在栏上时显示如下内容 Name Cats Count 4 对于条形图 这适用于 hover tool
  • 在 Java 中通过引用传递数组

    在Java中可以将数组作为参数传递吗 int 5 result 我想传递对数组的引用 因为我想更改调用函数中的数组 语法是什么 private void demo int array new int 5 System out println
  • 无法部署firebase功能

    Node js 命令提示符只是忽略此函数 而其他函数正在部署 我也没有收到任何错误 var database admin database var postsRef database ref posts postsRef on child
  • PyInstaller - FileNotFoundError:没有这样的文件或目录:“”

    我看过很多关于这个完全相同的错误代码的帖子 但有许多不同的答案 但我仍然无法解决我的问题 我的帖子与所有其他帖子的不同之处在于我得到以下内容 317 INFO Building PKG because PKG 00 toc is non e
  • 使用 pyodbc 从 Python 应用程序将值插入 Access 2003 数据库

    我过去经常检查 stackoverflow 并且总是能够找到我一直在寻找的东西 但我似乎无法让这个工作 所以我问我的第一个问题 我并不是一个真正的程序员 但我在工作中提到过Python 现在我有一个Python项目 实际上 我已经把一切都弄