Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to solve Python TypeError?

This is my code below and I try to load data from one database to another. I believe everything works fine but an error occurs and I don't know what this means.

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()

This is the error:

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

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

Ok here is my edit:

Now, this is my new code

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

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

sorry the error before occured was wrong because i forgot the "=" behind query that's the real error

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...
like image 685
The_Fox Avatar asked Jan 20 '23 13:01

The_Fox


2 Answers

According to the documentation, executemany() takes two parameters. You have provided but one (query).

executemany(operation, seq_of_parameters)

Prepare a database operation (query or command) and then execute it against all parameter tuples or mappings found in the sequence seq_of_parameters.

The function is mostly useful for commands that update the database: any result set returned by the query is discarded.

Parameters are bounded to the query using the same rules described in the execute() method.

Perhaps you just want execute()?

Or, more likely:

query = "INSERT INTO '20091229global' (proddate, site, plant, unit, line, pid, mods) VALUES (?, ?, ?, ?, ?, ?, ?)"
self.cur2.executemany(query, self.rows)
like image 199
Johnsyweb Avatar answered Feb 01 '23 01:02

Johnsyweb


Try this:

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

self.cur2.executemany(query, self.rows)
like image 42
ypercubeᵀᴹ Avatar answered Feb 01 '23 00:02

ypercubeᵀᴹ