,我添加了我自己的答案,这是可行的,但对改进开放,
在达曼陀罗看了一个项目之后。我开始连接到MySQL (他们使用SQLite),并且能够从MySQL将一个小的测试表导入到MySQL中。
从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()...but对多行的尝试将失败。在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()...as现在,我没有收到任何错误,但我的新行没有添加(id 3)。这就是我的表格在Excel里的样子..。

数据库拥有相同的结构,减去id 3。必须有一种更简单的方法来遍历行并为INSERT提取唯一的内容,但经过6个小时的尝试(和2本新的Python书籍)之后,我将请求帮助。
如果我跑了..。
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发布于 2013-05-27 18:21:05
最后,我找到了一个解决方案,为我提供了一个新的插入,并允许更新那些被更改的。不完全是基于单个查询的Python选择,但是可以。
import MySQLdb
db = MySQLdb.connect("xxx","xxx","xxx","xxx")
c = db.cursor()
row = 2
while Cell(row,1).value is not None:
c.execute("INSERT INTO users (id, username, password, \
userid, fname, lname) \
VALUES (%s, %s, %s, %s, %s, %s) \
ON DUPLICATE KEY UPDATE \
id=VALUES(id), username=VALUES(username), password=VALUES(password), \
userid=VALUES(userid), fname=VALUES(fname), lname=VALUES(lname);",
(CellRange((row,1),(row,6)).value))
row = row + 1
db.commit()
db.close()发布于 2013-05-27 07:06:45
这是你的问题:
while True:
if data[0]:
...
else:
break您的第一个id是0,所以在循环的第一次迭代中,data[0]将是错误的,您的循环将退出,而不会添加任何数据。你可能想到的是:
while True:
if data[0] is not None:
...
else:
breakhttps://stackoverflow.com/questions/16766184
复制相似问题