Python: TypeError: должен быть str, а не UUID - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть несколько списков разных типов, которые я пытаюсь вставить в таблицу в SQL Server через python.Но это дает мне ошибку формата строки (я думаю).Я пробовал разные способы, но все еще не могу найти способ сразу выполнить оператор вставки со списками данных.

print(type(InstanceGuid))            //uniqueIdentifier column in Table
print(type(InstanceName))                //varchar(255) column in table
print(type(ScoreList))               //float column in table

ВЫХОД:

<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

Теперь я пытаюсь выполнить следующее:

config.py

import os
from easydict import EasyDict


INSERT = EasyDict()

INSERT.FIELDS = ['InstanceGuid', 'InstanceName', 'Score', 'Timerun']

TEST.INSERT_TABLE = 'xxxxxxxxxxx'
TEST.IP = 'xxx.xxxx.xxx.xx'
TEST.DB_NAME = 'xxxx'
TEST.USERNAME = 'xxxxx'
TEST.PWD = 'xxxxxxxxxx'

Insert.py

def InsertTable():
    query = 'INSERT into '
    query += TEST.INSERT_TABLE
    query += '[' + INSERT.FIELDS[0] + '], '
    query += '[' + INSERT.FIELDS[1] + '], '
    query += '[' + INSERT.FIELDS[2] + '], '
    # query += '[' + INSERT.FIELDS[3] + '] '
    query += 'values '
    query += '(%s,%s,%s)%'

    return query



def storeData(InstanceGuid, InstanceName, ScoreList):

    InstanceGuid = np.array(InstanceGuid)

    InstanceName = np.array(InstanceName)

    print(type(InstanceGuid))
    print(type(InstanceName))
    print(type(ScoreList))

    with pytds.connect(TEST.IP, TEST.DB_NAME, TEST.USERNAME, TEST.PWD) as conn:
        cursor = conn.cursor()
        if conn == False:
            print("Error, did not connect to the database")
        else:
            print("Connected to DB for Insertion")

            query = InsertTable()

            cursor.executemany(query +
                               InstanceGuid, InstanceName, ScoreList)
            cursor.execute("COMMIT")

При выполнении приведенный выше метод выдает ошибку:

ОШИБКА:

TypeError: must be str, not UUID

РЕДАКТИРОВАНИЕ:

Я где-то читал, что executemany () ожидает список вместо массива, послеПри прохождении списка выдается ошибка:

operation = operation % tuple(names) ValueError: incomplete format

Изменения кода были:

def InsertTable():
    query = 'INSERT into '
    query += TEST.INSERT_TABLE
    query += '[' + INSERT.FIELDS[0] + '], '
    query += '[' + INSERT.FIELDS[1] + '], '
    query += '[' + INSERT.FIELDS[2] + '], '
    query += '[' + INSERT.FIELDS[3] + '] '
    query += 'values '
    query += '(%s,%s,%s,%s)%'

    return query




with pytds.connect(TEST.IP, TEST.DB_NAME, TEST.USERNAME, TEST.PWD) as conn:
        cursor = conn.cursor()
        if conn == False:
            print("Error, did not connect to the database")
        else:
            print("Connected to DB for Insertion")
            query = InsertTable()
            cursor.executemany(query,
                               (InstanceGuid, InstanceName, ScoreList, datetimeList))
            cursor.execute("COMMIT")
        print("Inserted Successfully")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...