如何解决如何从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 举报,一经查实,本站将立刻删除。