1

我编写了一个简单的脚本来解析 csv 并将数据插入 SQL Server。所以,非常奇怪的问题是,如果我在if 条件中调用它们,一些变量会丢失。这是脚本:

# DB connection
conn = pypyodbc.connect('DRIVER={SQL Server};SERVER=xxx.xxx.xxx.xxx;DATABASE=SCAN;UID=user;PWD=password')
cursor = conn.cursor()

def main() :
    reader = csv.reader(file(filename, "rb"), delimiter=';')
    for row in reader :
        ip = row[0]
        host = row[1]
        domain = row[2]

        # get Operating System ID
        os_id = getOperatingSystem(row[3])

        manufacturer = row[4]
        model = row[5]

        # get computer_manufacturer ID
        computer_manufacturer = getManufacturer(manufacturer, computer_model)

        arch = getArch(row[6])

        values = [ip, host, domain, os_id, manufacturer, arch]

        hostIP = getHostIP(ip)
        print "hostIP: " +str(hostIP)
        if hostIP == 0:

            print values

            # insert values in DB
            cursor.execute(
                """
                INSERT INTO dbo.hosts (ip, host, domain, os_id, manufacturer, arch_id)
                VALUES (?, ?, ?, ?, ?, ?)
                """, values)
            cursor.commit()


# return host IP ID
def getHostIP(hostIP) :
    cursor.execute("SELECT id FROM mytable WHERE ip = ?", [hostIP])
    row = cursor.fetchone()

    if row is not None :
        return row[0]
    return 0

# return ID of Computer Manufacturer
def getComputerManufacturer(manufacturer, computer_model) :
    cursor.execute("SELECT id FROM manufacturer WHERE manufacturer = ? AND computer_model = ?", [manufacturer, computer_model])
    row = cursor.fetchone()

    if row is not None:
        return row[0]
    else :
        return setComputerManufacturer(manufacturer, computer_model)

如果我注释了 cursor_executecursor_commit行,则打印值正确显示数据,否则它只显示相同的 csv 行。你能给我一点帮助吗?谢谢

4

0 回答 0