Как вставить данные в столбец уникального идентификатора в SQL Server с помощью pyodbc

У меня есть таблица со столбцом типа uniqueidentifier. Как вставить данные в столбцы uid с помощью pyodbc?

Я пробую этот код:

 cursor.execute("""
                   Insert into tablename (col1,col2)
                   values (?,?)
                """, 
               '67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE',
               '2E92D02D-B7DA-4DED-9816-26B2CF867FA2' )

col1 и col2 относятся к типу uniqueidentifier.

Я получаю эту ошибку:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Преобразование не удалось при преобразовании строки символов в уникальный идентификатор. (8169) (SQLExecDirectW)')


person Meraj Hussain    schedule 19.12.2020    source источник
comment
это отвечает на ваш вопрос?   -  person Barbaros Özhan    schedule 19.12.2020
comment
Как мне это сделать с помощью python?   -  person Meraj Hussain    schedule 19.12.2020
comment
Я хотел знать, есть ли какие-либо библиотеки Python для решения этой ситуации? Я использовал библиотеку UUID, но это мало помогает.   -  person Meraj Hussain    schedule 19.12.2020
comment
Мне удалось вставить эти значения с помощью pyobc 4.0.30, Python 3.7.1 и драйвера ODBC 17. Интересно, связана ли проблема с конфигурацией SQL-сервера? Может попробовать создать новую таблицу и вставить их туда?   -  person Jason Cook    schedule 20.12.2020
comment
Я использую питон 3.6. Не могли бы вы поделиться кодом?   -  person Meraj Hussain    schedule 23.12.2020
comment
Приведенный вами пример работает непосредственно для меня. К сожалению, комментарии не позволяют мне легко форматировать код.   -  person Jason Cook    schedule 23.12.2020


Ответы (1)


Вы можете использовать fast_to_sql, который является улучшенным способом загрузки кадров данных pandas в Microsoft SQL Server. Такие как

df = pd.DataFrame({
"col1": ['67E616B4-7DBC-6D14-B0BA-0F7DE2F94AEE'],
"col2": ['2E92D02D-B7DA-4DED-9816-26B2CF867FA2']
})
    
 fts.fast_to_sql(df, "tablename", conn, if_exists="append", custom=None, temp=False)

где опция append означает вставку новых значений в таблицу

person Barbaros Özhan    schedule 19.12.2020
comment
Спасибо! Но это работает для python 3.8+. У меня только питон 3.6. Я не могу перейти на 3.8 по некоторым причинам. Есть ли альтернатива этому? - person Meraj Hussain; 19.12.2020
comment
df.to_sql('tablename', con=conn, if_exists='append', index=False ) может быть другим вариантом @MerajHussain - person Barbaros Özhan; 19.12.2020