【发布时间】:2014-08-06 19:29:47
【问题描述】:
我过去检查过很多 stackoverflow,并且总是能够找到我一直在寻找的东西,但我似乎无法让这个工作正常,所以我要问我的第一个问题。
我不是真正的程序员,但我在工作中提到了 Python,现在我有一个 Python 项目。我实际上已经把一切都弄清楚了,但是将值插入数据库让我陷入了循环。
基本问题:
我有一个使用 Python 和 tkinter 构建的表单。当按下表单上的按钮时,我希望将值插入到数据库中。
细节:
我正在使用 Python 3.4、pyodbc 和 Access 2003 数据库。
数据库只是一个名为 file_info 的表,它有以下字段,字段数据类型列在管道后面。
ID |自动编号
文件名 |文字
日期 |日期/时间
batch_amount |编号
包裹数量 |编号
sum_amount |编号
最终我想插入一些在其他函数中计算的值,但目前我只是试图通过一个函数插入一些设置值,我无法让它工作。
连接字符串:
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 行 返回 self.func(*args) 运行中的文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 170 行 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 36 行,在 insert_data cur.execute(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 行 返回 self.func(*args) 运行中的文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 154 行 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 20 行,在 insert_data cur.execute(sql) TypeError:要执行的第一个参数必须是字符串或 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 行 返回 self.func(*args) 运行中的文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 153 行 插入数据() 文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 19 行,在 insert_data (1, '测试', '8/01/2014 1:00:00 PM', 2, 2, 2)) pyodbc.ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 6 个参数', 'HY000')
我猜我所尝试的一切都非常不正确,因此我们将不胜感激。
谢谢大家。
编辑:
基于第一响应的新尝试,唯一的区别是我使用三引号,因为代码跨越 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 行 返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.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 行 返回 self.func(*args) 文件“C:/Users/amarquart/PycharmProjects/Grid testing/Source/Grid testing.py”,第 20 行,在 insert_data 值 (?, ?, ?, ?, ?, ?)""", 参数) pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]可选功能未实现 (106) (SQLBindParameter)')
【问题讨论】:
标签: python database ms-access insert pyodbc