Dictionary TypeError:“dict”对象不支持索引

Dictionary TypeError:“dict”对象不支持索引,dictionary,mysql-python,psycopg2,python-2.6,Dictionary,Mysql Python,Psycopg2,Python 2.6,我正在编写这段代码,Python2.6.6,旧版本,因为我必须在linux服务器上执行此脚本,可能是centOS 6,或者是安装了基本RepositoriesTable的Debian,并且没有权限安装不在这些repos上的软件 这需要注意从具有特定schemadb结构的数据库mysql中选择数据,并将其插入具有不同模式的其他数据库PostgreSQL中 cur_msql.execute("SELECT customerName, contactName, address, city, posta

我正在编写这段代码,Python2.6.6,旧版本,因为我必须在linux服务器上执行此脚本,可能是centOS 6,或者是安装了基本RepositoriesTable的Debian,并且没有权限安装不在这些repos上的软件

这需要注意从具有特定schemadb结构的数据库mysql中选择数据,并将其插入具有不同模式的其他数据库PostgreSQL中

cur_msql.execute("SELECT customerName, contactName, address, city, postal_code, country FROM tablename")

args_str = ','.join(cur_psql.mogrify("(%s,%s,%s,%s,%s,%s)", x) for x in cur_msql)

try:
  cur_psql.execute("INSERT INTO tablename (name, contact, address, city, cap, country) \
                    VALUES " + args_str)
except psycopg2.Error as e:
  print "Cannot execute that query", e.pgerror
  sys.exit("Leaving early the script")
我得到这个错误:

TypeError: 'dict' object does not support indexing
以下帖子没有解决我的问题:

在《圣经》中,我发现了这一点,但我在理解它的含义方面遇到了困难:

Psycopg始终要求将位置参数作为序列传递,即使查询采用单个参数也是如此。记住 要在Python中创建单个项元组,您需要一个逗号!看见 将参数传递给SQL查询

我确实认为我的问题与以下方面有关:


当您这样使用cur_psql.mogrify时,它需要位置参数,但您可以使用%customerNames、%contactNames、%addresss、%City、%postal_codes、%Country

这样说,代替使用Python生成大量的参数串,而是考虑使用:


cur_msql和cur_psql引用的是相同的数据库还是不同的数据库?如果它们彼此都可以访问,您只需发出插入即可。。选择查询他们正在引用不同的数据库,源数据库是mysql,目标数据库是postgres。它是将数据从一个数据库迁移到另一个数据库的脚本。两个数据库上的schemadb结构不同。谢谢你的回答:谢谢你的回答,我正在分析。我已经考虑过executemany方法,但是我已经放弃了它,因为它过度地破坏了性能,因为这个方法,单独执行了很多insert,而我尝试的方法将执行所有记录中的一个insert。速度提高100倍。我的脚本必须处理相当大的数据集Hanks,您的第一个提示解决了我的问题:
cur_psql.executemany("INSERT INTO tablename (name, contact, address, city, cap, country) VALUES (%(customerName)s,%(contactName)s,%(address)s,%(city)s,%(postal_code)s,%(country)s)", cur_msql)