Python & SQL - Python фактически не передает данные в базу данных SQL - PullRequest
1 голос
/ 16 апреля 2019

Это вопрос из двух частей, но я доберусь до моей первой головоломки.

У меня есть код, который я просто пытаюсь проверить, где я хочу, чтобы Python запускал хранимую процедуру с необходимыми переменными, и она запускается и даже показывает новую строку. Однако, если я захожу в БД и запускаю инструкцию SELECT, чтобы показать мне данные, его там нет. Как будто БД заблокировала его или что-то странное.

Этот код работает, если я запускаю оператор выбора вместо этой хранимой процедуры. Хранимая процедура работает, и даже когда я запускаю этот код, Python запустит хранимую процедуру и выплюнет новую строку (вместе с новым номером строки, который автоматически генерируется из-за идентификатора, который у меня есть в столбце)

import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=REPORT\INSTANCE;'
                      'UID=UserID;'
                      'PWD=Password;'
                      'Database=ReportDB;'
                      'Trusted_Connection=no;')

cursor = conn.cursor()
cursor.execute('EXEC [Schema].[Comments] \'2019-04-18 00:00:00.000\',\'Team\',\'1900-01-01 13:12:16.000\',\'testing this string\',\'username\'')


for row in cursor:
    print(row)

Вид потерянного здесь. Python запустит хранимую процедуру (которую я установил для запуска выбора в конце, чтобы доказать, что данные были зафиксированы), и Python показывает это, но я не вижу его в реальной БД. Эта линия исчезла.

This is the result after running stored procedure in Python

Вы можете видеть здесь, 470 - это столбец идентификатора (идентификатор, не ноль), и это то, что должно быть.

Here is the SQL run right after

Обратите внимание, что самая последняя запись по-прежнему 469

  • Тот же экземпляр
  • То же DB

EDIT

Я только что заметил что-то в Питоне. Каждый раз, когда я запускаю код Python, он запускает код, и хранимая процедура делает выбор в конце, но каждый раз, когда я запускаю его, CommentsID увеличивается на 1 (как и должно быть), но НЕ запоминает предыдущие, вставленные Python. Единственное, что возвращает оператор SELECT, это то, что я зафиксировал через сам SQL.

enter image description here

Обратите внимание, что CommentsID (первое число в каждой строке, начинающееся с 4) идет от 469 до 471. Тем не менее, у меня только что было изображение выше, которое показывает 470 - куда делось 470?!

Вторая часть:

Мне трудно помещать переменные в этот фрагмент кода EXEC. Я думаю, что мне нужно заключить его в одинарные кавычки, что означает, что мне нужно поставить \ перед кавычками, которые мне нужны, чтобы остаться для кода SQL. Но когда я делаю это, а затем пытаюсь запустить его, я не могу заставить его извлекать переменные.

Вот какой SQL должен быть:

EXEC [schema].[Comments] 'Username'

В Python я знаю, что он должен быть в одинарных кавычках, но поскольку в коде SQL есть кавычки, вы обычно просто ставите \ перед таким образом:

'EXEC [schema].[Comments] \'Username\''

Это работает. Однако затем я хочу, чтобы имя пользователя извлекалось из переменной, а не было строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...