我已经添加了我自己的答案,该答案有效但可以改进
在datanitro看到一个项目之后。我开始连接到 MySQL(他们使用 SQLite),并且能够将一个小型测试表从 MySQL 导入 Excel。
从 Excel 表中插入新的更新数据是下一个任务,到目前为止,我可以让一行像这样工作......
import MySQLdb
db = MySQLdb.connect("xxx","xxx","xxx","xxx")
c = db.cursor()
c.execute("""INSERT INTO users (id, username, password, userid, fname, lname)
VALUES (%s, %s, %s, %s, %s, %s);""",
(Cell(5,1).value,Cell(5,2).value,Cell(5,3).value,Cell(5,4).value,Cell(5,5).value,Cell(5,6).value,))
db.commit()
db.close()
...但尝试多行会失败。我怀疑在 Excel 中遍历行时出现任何问题。这是我到目前为止...
import MySQLdb
db = MySQLdb.connect(host="xxx.com", user="xxx", passwd="xxx", db="xxx")
c = db.cursor()
c.execute("select * from users")
usersss = c.fetchall()
updates = []
row = 2 # starting row
while True:
data = tuple(CellRange((row,1),(row,6)).value)
if data[0]:
if data not in usersss: # new record
updates.append(data)
row += 1
else: # end of table
break
c.executemany("""INSERT INTO users (id, username, password, userid, fname, lname) VALUES (%s, %s, %s, %s, %s, %s)""", updates)
db.commit()
db.close()
...到目前为止,我没有收到任何错误,但没有添加我的新行(id 3)。这就是我的表格在 Excel 中的样子...
数据库具有相同的结构,减去 id 3。必须有一种更简单的方法来遍历行并为 INSERT 提取独特的内容,但是在尝试不同的东西(和 2 本新的 Python 书籍)6 小时后,我将要求帮助。
如果我跑...
print '[%s]' % ', '.join(map(str, updates))
或者
print updates
我的结果是
[]
所以这很可能一开始就没有将任何数据传递给 MySQL。
最新更新和工作脚本
不完全是我想要的,但这对我有用......
c = db.cursor()
row = 2
while Cell(row,1).value != None:
c.execute("""INSERT IGNORE INTO users (id, username, password, userid, fname, lname)
VALUES (%s, %s, %s, %s, %s, %s);""",
(CellRange((row,1),(row,6)).value))
row = row + 1