【问题标题】:How to solve Python TypeError?如何解决 Python TypeError?
【发布时间】:2011-09-10 20:01:56
【问题描述】:

这是我下面的代码,我尝试将数据从一个数据库加载到另一个数据库。我相信一切正常,但发生错误,我不知道这意味着什么。

import pymssql, psycopg2

class Datenbankabfrage:

def __init__(self):
    self.conn1 = pymssql.connect(host='***', user='***', password='***', database='****')
    self.conn2 = psycopg2.connect("dbname='****' user='****' host='****' password='****'")

    self.cur1 = self.conn1.cursor()
    self.cur2 = self.conn2.cursor()

def abfrage(self):
    self.cur1.execute("SELECT tag, site, plant, unit, line, ProcessID AS pid, Count(ReadTime) AS mods \
                        FROM ( \
                        select dateadd(dd, -1, convert(varchar, getDate(),111)) \
                        as tag, ReadTime, processID, subid, PR.Site, PR.Plant, PR.Unit, PR.Line \
                        from FactBarcodeReading BCR with(nolock) \
                        inner join DimProcess PR on BCR.ProcessKey = PR.ProcessKey \
                        where PR.ProcessID IN  (802, 1190, 1800, 3090, 3590, 4390, 4590, 4800, 5000, 5400, 4190) \
                        and ReadTime between dateadd(dd, -1, convert(varchar, getDate(),111)) \
                        and dateadd(dd, -0, convert(varchar, getDate(),111)) \
                        ) a \
                        GROUP BY tag, site, plant, unit, line, ProcessID \
                        ORDER BY site, plant, unit, line, ProcessID")

    self.rows = self.cur1.fetchall()

    query = ("INSERT INTO '20091229global' (proddate, site, plant, unit, line, pid, mods) VALUES (?, ?, ?, ?, ?, ?, ?)", self.rows)

    self.cur2.executemany(query)

    self.conn2.commit()

    self.conn2.close()



a = Datenbankabfrage()
a.abfrage()

这是错误:

Traceback (most recent call last):
File "C:\Documents and Settings\FS107319\My Documents\Python\mssql_abfrage.py", line 39, in <module>
a.abfrage()
File "C:\Documents and Settings\FS107319\My Documents\Python\mssql_abfrage.py", line 30, in    abfrage
self.cur2.executemany(query)
TypeError: Required argument 'vars_list' (pos 2) not found

---------------------------------------------- --------------------------

好的,这是我的编辑:

现在,这是我的新代码

query("INSERT INTO '20091229global' (proddate, site, plant, unit, line, pid, mods) VALUES ('?', '?', '?', '?', '?', '?', '?')")

self.cur2.execute(query, self.rows)

抱歉之前发生的错误是错误的,因为我忘记了查询后面的“=” 这才是真正的错误

Traceback (most recent call last):
File "C:\Documents and Settings\FS107319\My Documents\Python\mssql_abfrage.py", line 39, in <module>
a.abfrage()
File "C:\Documents and Settings\FS107319\My Documents\Python\mssql_abfrage.py", line 30, in abfrage
self.cur2.execute(query, self.rows)
ProgrammingError: FEHLER:  Syntaxfehler bei »'20091229global'«
LINE 1: INSERT INTO '20091229global' (proddate, site, plant, unit, l...

【问题讨论】:

  • 感谢您的帮助。问题是问号。我必须用 %s 替换它们。

标签: python psycopg2 typeerror


【解决方案1】:

根据the documentationexecutemany() 有两个参数。您只提供了一个 (query)。

executemany(operation, seq_of_parameters)

准备数据库操作(查询或 命令),然后执行它 找到所有参数元组或映射 在seq_of_parameters的序列中。

该功能主要用于 更新数据库的命令:任何 查询返回的结果集是 丢弃。

参数绑定到查询 使用中描述的相同规则 execute() 方法。

也许你只是想要execute()

或者,更有可能:

query = "INSERT INTO '20091229global' (proddate, site, plant, unit, line, pid, mods) VALUES (?, ?, ?, ?, ?, ?, ?)"
self.cur2.executemany(query, self.rows)

【讨论】:

  • 我在你的回答中这样做了。但现在我收到此错误:文件“C:\Documents and Settings\FS107319\My Documents\Python\mssql_abfrage.py”,第 39 行,在 a.abfrage() 文件“C:\Documents and Settings\FS107319 \My Documents\Python\mssql_abfrage.py",第 28 行,在 abfrage 查询中("INSERT INTO '20091229global' (proddate, site, plant, unit, line, pid, mods) VALUES (?, ?, ?, ?, ? , ?, ?)") TypeError: 'tuple' object is not callable
  • @The_Fox:您可以将此作为编辑附加到您的问题吗?您在那里格式化会更容易,我们也更容易阅读!
  • 和@The_fox:我认为您需要删除query = ("INSERT INTO ...")前后的括号
  • @ypercube:是的。 querystring,而不是 tuple。答案已更新。
【解决方案2】:

试试这个:

query = """
    INSERT INTO '20091229global'
        (proddate, site, plant, unit, line, pid, mods)
    VALUES (?, ?, ?, ?, ?, ?, ?)
        """

self.cur2.executemany(query, self.rows)

【讨论】:

  • 如果您希望我们忽略某些内容,只需将其删除即可避免混淆。
猜你喜欢
  • 2014-02-20
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 2019-07-10
  • 1970-01-01
  • 2012-05-26
  • 2017-10-14
相关资源
最近更新 更多