微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从Excel> Python> Microsft Access传输数据

如何解决如何从Excel> Python> Microsft Access传输数据

我已经为此工作了好几天了。有人请提供任何建议。这是我当前的代码(它不起作用,并且我知道为什么不起作用):

import pyodbc

import openpyxl

path = ('C:\\Access_Test.xlsx')
wb = openpyxl.load_workbook(path)
sheet = wb.active
b2 = a2 = sheet['A2']
b2 = sheet['B2']
c2 = sheet['C2']
d2 = sheet['D2']
e2 = sheet['E2']
f2 = sheet['F2']
g2 = sheet['G2']
h2 = sheet['H2']
i2 = sheet['I2']
j2 = sheet['J2']
k2 = sheet['K2']
l2 = sheet['L2']
m2 = sheet['M2']
n2 = sheet['N2']
o2 = sheet['O2']
test2 = (")'")
test =  (a2.value,b2.value,c2.value,d2.value,e2.value,f2.value,g2.value,h2.value,i2.value,j2.value,k2.value,l2.value,m2.value),(test2)  

#Everything to this point is fine.  I can read & print everything from the Excel document (though the formatting is an issue with how the query statements work in pyodbc).




driver = '{Microsoft Access Driver(*.mdb,*accdb)}'
filepath = 'C:\\Users\\Db_Mngr\\Desktop\\PythonTests\\Microsoft Studio Projects\\HUD Report-2001-copy For Python.mdb'

#Find data sources
myDataSources = pyodbc.dataSources()
access_driver = myDataSources['MS Access Database']

#This is the full command to open the Access database
cnxn = pyodbc.connect(driver=access_driver,dbq=filepath,autocommit=True)
crsr = cnxn.cursor()

crsr.execute(str(test))

如果我使用:

print:(test)

我的输出看起来像这样(此测试中的所有数据都是伪造的):

("'''INSERT INTO Python_Test([Case2],[Last],[First],[Initial Intake],[Intake],[Age],[Gender],[Ethnic],[Race],[dob],[SSN],[Educ Lvl],[Marital])VALUES",('Sep00000','Test','01/01/2020',1,'Male','A. Hispanic','E. White','High School'),")'")

如您所见,对于pyodbc而言,这大约是70%,但是它显然会抛出错误(开头的引号太多,“ VALUES”之后的引号,“ VALUES”之后的“”)。 ...等等,我明白了。有没有人能够解释如何使此代码起作用?

一开始删除多余的引号不一定是最大的问题,我想我可以弄清楚。但是“ VALUES”部分之后发生的一切都一团糟。

将感谢您的任何反馈!

解决方法

我猜您只需要正确格式化字符串即可成为有效的SQL查询。试试这样的东西

sql = f"INSERT INTO table([Case2],[Last],...) VALUES ({a2.value},{b2.value},...)"

sql = ''.join(test)
,

这是工作代码专家!

import pyodbc

import openpyxl

path = ('C:\\Users\\Db_Mngr\\Desktop\\PythonTests\\Microsoft Studio Projects\\Access_Test.xlsx') #Set the path to the Excel document that you want to transfer data from
wb = openpyxl.load_workbook(path)
sheet = wb.active


b2 = sheet['B2']
c2 = sheet['C2']
d2 = sheet['D2']
e2 = sheet['E2']
f2 = sheet['F2']
g2 = sheet['G2']
h2 = sheet['H2']
i2 = sheet['I2']
j2 = sheet['J2']
k2 = sheet['K2']
l2 = sheet['L2']
m2 = sheet['M2']
n2 = sheet['N2']
o2 = sheet['O2']

#This is the trouble spot.  If you've ever worked with this stuff you know that the formatting has to be PERFECT.  A single space out of place throws errors. 

startcmmd = "'''INSERT INTO Python_Test([Case2],[First],[Initial Intake],[Intake],[Age],[Gender],[Ethnic],[Race],[DOB],[SSN],[Educ Lvl],[Marital])VALUES('{}','{}','{}')'''".format(b2.value,c2.value,d2.value,e2.value,f2.value,g2.value,h2.value,i2.value,j2.value,k2.value,l2.value,m2.value,n2.value)

#Get connected to your Access document

driver = '{Microsoft Access Driver(*.mdb,*accdb)}'
filepath = 'C:\\Users\\Db_Mngr\\Desktop\\PythonTests\\Microsoft Studio Projects\\HUD Report-2001-Copy For Python.mdb'


myDataSources = pyodbc.dataSources()
access_driver = myDataSources['MS Access Database']

#set up your cursor    

cnxn = pyodbc.connect(driver=access_driver,dbq=filepath,autocommit=True)
crsr = cnxn.cursor()

#Now execute!  Don't forget to run this with eval!
crsr.execute(eval(startcmmd))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。