Вставить данные в sql-сервер с помощью Python

Я хочу вставить данные в sql-сервер с raspberry pi с помощью python. Я пробовал использовать pypyodbc, но он не работает должным образом. Можете ли вы посоветовать мне использовать ведьмовский модуль.

import pyodbc 
conn = pyodbc.connect(
                     'DRIVER={SQL Server Native Client 11.0};'
                     'SERVER=server;'
                     'Integrated_Security=false;'
                     'Trusted_Connection=no;'
                     'UID=pi;'
                     'PWD=pi;'
                     'DATABASE= database'
                 )
cursor = conn.cursor()
cursor.execute('SELECT * FROM database.table')

for row in cursor:
    print(row)

yodbc.InterfaceError: ('28000', '[28000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Ошибка входа для пользователя \' pi \ '. (18456) (SQLDriverConnect); [28000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Невозможно открыть базу данных «базу данных», запрошенную при входе в систему. Ошибка входа. (4060); [28000] [Microsoft] [Собственный клиент SQL Server 11.0] Недопустимый атрибут строки подключения (0) ; [28000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Ошибка входа для пользователя «pi». (18456); [28000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Невозможно открыть базу данных «базу данных», запрошенную именем входа. Ошибка входа. (4060); [28000] [Microsoft] [SQL Server Native Client 11.0] Недопустимый атрибут строки подключения (0) ')


person Catalin    schedule 30.07.2019    source источник
comment
убедитесь, что в конфигурации области сервера sql, подключение через tcp / ip и именованные каналы включены.   -  person Manish Mishra    schedule 30.07.2019
comment
@ManishMishra Я установил сервер sql. Я могу подключиться с компьютера-коллеги с учетными данными sql, которые я настроил. Сервер виден снаружи, со стороны сервера вроде все нормально. проблема в том, что я не могу подключиться к пи через python.   -  person Catalin    schedule 30.07.2019
comment
ну, проблема, которую вы вставили, то есть Login failed for user \'pi\', говорит о том, что что-то не так с доступом. Проверьте, можете ли вы войти в систему через студию управления с теми же учетными данными, если да, то доступ к определенным именованным каналам. Также не забудьте перезапустить службу экземпляра для любых изменений.   -  person Manish Mishra    schedule 30.07.2019
comment
Я вижу, что server - это сервер, а база данных - database. Это правильно? В любом случае удалите пробел перед текстом database. Проверьте, можете ли вы войти в систему, используя эти данные подключения, напрямую через клиент SQL Server.   -  person fiveelements    schedule 30.07.2019
comment
@ManishMishra. Я могу подключиться через .. **. ** \ SQLEXPRESS по ssms с учетными данными, которые вам нравятся?   -  person Catalin    schedule 30.07.2019
comment
@fiveelements, я поместил это туда, поэтому я не буду раскрывать свой сервер и данные.   -  person Catalin    schedule 30.07.2019
comment
@Catalin нет ни Trusted_Connection, ни Integrated_Security. Использование случайных ключевых слов гарантирует неудачу. Либо укажите аутентификацию Windows, либо пару имени пользователя и пароля, но не то и другое одновременно.   -  person Panagiotis Kanavos    schedule 30.07.2019
comment
@PanagiotisKanavos, можете ли вы указать случайным образом, что вы имеете в виду под ключевым словом?   -  person Catalin    schedule 30.07.2019
comment
@Catalin Я уже сделал. Вы использовали Integrated_Security и Trusted_Connection и UID и PWD в одной строке подключения. Это гарантирует, что Invalid connection string attribute ошибка. Если вы не хотите использовать проверку подлинности Windows, просто используйте UID и PWD. Документы не ошибаются.   -  person Panagiotis Kanavos    schedule 30.07.2019
comment
@Catalin, говоря о документах, попробуйте строку подключения, показанную на Шаг 3. Подтверждение концепции подключения к SQL с помощью pyodbc. Строка подключения использует драйвер ODBC, а не (старый) собственный клиент. Для передачи учетных данных используются только UID и PWD.   -  person Panagiotis Kanavos    schedule 30.07.2019
comment
@PanagiotisKanavos, я нашел проблему   -  person Catalin    schedule 30.07.2019
comment
@Catalin, нет, вы используете \ SQLExpress для подключения через ssms, но server экземпляр в вашем коде Python. вы также должны использовать .\SqlExpress в своем коде Python   -  person Manish Mishra    schedule 30.07.2019
comment
@ManishMishra, теперь я не могу установить драйвер odbc 17 для сервера sql на debian 9   -  person Catalin    schedule 30.07.2019


Ответы (2)


Так что коллега просто прошел мимо меня и сказал мне поместить все данные между "" только в 1 строку. Также я удалил "Integrated_Security = false;" Trusted_Connection = no; как кто-то сказал мне

Рабочий код

something='something'
import pyodbc 
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=srv;DATABASE=datavase;UID=pi;PWD=pass')
cursor = conn.cursor()
cursor.execute("insert into test values (?, 'awesome library ')",var)
cursor.execute('SELECT * FROM test')
for row in cursor:
    print(row)
person Catalin    schedule 30.07.2019

Я очень рекомендую использовать sqlite3

import sqlite3
conn = sqlite3.connect(
                      'DRIVER={SQL Server Native Client 11.0};'
                      'SERVER=server;'
                      'Integrated_Security=false;'
                      'Trusted_Connection=no;'
                      'UID=pi;'
                      'PWD=pi;'
                      'DATABASE= database'
                  )
cursor = conn.cursor()
cursor.execute('SELECT * FROM database.table')

for row in cursor:
    print(row)
person Ibtihaj Tahir    schedule 30.07.2019
comment
вопрос об использовании sql server. а не what db server would you recommend? - person Manish Mishra; 30.07.2019
comment
Я использую sqlite3 как резервную копию, если сеть выходит из строя. Я хочу иметь возможность писать в базу данных напрямую, и в случае, если сеть не работает, чтобы писать в локальный .db - person Catalin; 30.07.2019