Как решить Python TypeError? - PullRequest
4 голосов
/ 08 июня 2011

Это мой код ниже, и я пытаюсь загрузить данные из одной базы данных в другую.Я считаю, что все работает нормально, но возникает ошибка, и я не знаю, что это значит.

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...

Ответы [ 2 ]

8 голосов
/ 08 июня 2011

Согласно документации , executemany() принимает два параметра. Вы указали только один (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)
1 голос
/ 08 июня 2011

Попробуйте это:

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

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