使用 pyodbc 插入和加入 Access 数据库
insert and join in Access database using pyodbc
我有一个 MS 访问数据库,想从 Python 开始使用它。目的是拥有一个 table、“单位”,其中包括所有内容,为了实现这一点,我想将信息插入 table“units_temp”,然后将这些加入到tables.
代码还没有完成,但目前我正在努力填充一个随机 ID(目的只是为了不在每次我想在每个功能实现之前尝试代码时都被迫手动更改代码中的 ID到位)。
import pyodbc
from random import randint
random_id = randint(0,10000)
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\aaa.bbb\Documents\Python Scripts\DB\Test_db.accdb;')
cursor = conn.cursor()
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name) VALUES (%s,%s,%s,%s,%s,%s)'''
cursor.execute('''
INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name)
VALUES ('124','aa','bb','2','500','phones')
''')
recordTuple = (random_id,'aa','bb','99','900','random')
cursor.execute(mySql_insert_query,recordTuple)
JoinQuery = "SELECT Units.client_id from Units INNER JOIN Units_temp on (Units.client_id=Units_temp.Client_id)"
cursor.execute(JoinQuery)
conn.commit()
我收到以下错误
ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] 查询表达式 '%s' 中的语法错误。(-3100) (SQLPrepare)")
就是这条线
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name) VALUES (%s,%s,%s,%s,%s,%s)'''
您没有 %s 参数的值。像在下一行中一样用值替换它们。
此外,我严重怀疑这些字段应该是文本而不是数字:
units_ordered,product_price_per_unit
pyodbc 使用 ?
作为参数占位符,而不是 %s
,所以你的查询字符串应该是
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name, … ) VALUES (?,?, … )'''
然后你用
执行它
cursor.execute(mySql_insert_query,recordTuple)
和以前一样。
我有一个 MS 访问数据库,想从 Python 开始使用它。目的是拥有一个 table、“单位”,其中包括所有内容,为了实现这一点,我想将信息插入 table“units_temp”,然后将这些加入到tables.
代码还没有完成,但目前我正在努力填充一个随机 ID(目的只是为了不在每次我想在每个功能实现之前尝试代码时都被迫手动更改代码中的 ID到位)。
import pyodbc
from random import randint
random_id = randint(0,10000)
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\aaa.bbb\Documents\Python Scripts\DB\Test_db.accdb;')
cursor = conn.cursor()
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name) VALUES (%s,%s,%s,%s,%s,%s)'''
cursor.execute('''
INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name)
VALUES ('124','aa','bb','2','500','phones')
''')
recordTuple = (random_id,'aa','bb','99','900','random')
cursor.execute(mySql_insert_query,recordTuple)
JoinQuery = "SELECT Units.client_id from Units INNER JOIN Units_temp on (Units.client_id=Units_temp.Client_id)"
cursor.execute(JoinQuery)
conn.commit()
我收到以下错误 ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] 查询表达式 '%s' 中的语法错误。(-3100) (SQLPrepare)")
就是这条线
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name,client_last_name,units_ordered,product_price_per_unit,product_name) VALUES (%s,%s,%s,%s,%s,%s)'''
您没有 %s 参数的值。像在下一行中一样用值替换它们。
此外,我严重怀疑这些字段应该是文本而不是数字:
units_ordered,product_price_per_unit
pyodbc 使用 ?
作为参数占位符,而不是 %s
,所以你的查询字符串应该是
mySql_insert_query='''INSERT INTO Units (client_id,client_first_name, … ) VALUES (?,?, … )'''
然后你用
执行它cursor.execute(mySql_insert_query,recordTuple)
和以前一样。