Я пытаюсь выполнить простой необработанный запрос SQL на базе данных SQL-Server с помощью SqlAlchemy (и Pymssql в качестве поставщика).
Вот моя первая попытка (с использованием execute
метода подключения и передачи параметров ** путем kwargs):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = provider.connect().execute(query, source ='mysource')
Я передал параметры любым способом, показанным в руководствах (передачакак kwargs и передавая как dict), но ни один из них не сработал, и когда вызывается метод execute
, выдается исключение, которое говорит 'Must declare the scalar variable' @source
, как будто ни один параметр не передается в метод execute
, кажется, ORM(или, возможно, поставщик данных (в данном случае pymssql)) не распознает параметры, переданные методу execute
, и передает только запрос (без параметров) в механизм БД (что вызывает исключение).
Я полагаю, что тамможет быть некоторая проблема с поставщиком MSSQL-сервера (Pymssql), поскольку SQL-сервер не является гражданином первого класса в семействе SqlAlchemy и Python, но не имеет прямого представления о том, что может вызвать это.
, как я уже говорил выше, я также пыталсяа также другие способы
Вот моя вторая попытка (с использованием execute
метода соединения и передачи параметров в качестве dict):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = provider.connect().execute(query, {source :'mysource'})
Моя третья попытка (с использованием execute
mметод объекта двигателя и параметры передачи ** способом kwargs):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = provider.execute(query, source ='mysource')
Моя четвертая попытка (с использованием метода объекта двигателя 1010 * и передачей параметров как dict):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = provider.execute(query, {source :'mysource'})
Моя пятая попытка (создание сеанса и использование execute
метода сеанса и передача параметров в качестве dict):
provider = DataProvider().engine
session = sessionmaker(bind=provider)()
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = session.execute(query, {source :'mysource'})
Моя шестая попытка (создание сеанса и использование execute
метода сеанса и передача параметров** kwargs):
provider = DataProvider().engine
session = sessionmaker(bind=provider)()
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = session.execute(query, source='mysource')
, но, как я уже упоминал ранее, ни одно из вышеперечисленных действий не сработало, и все они привели к тому же исключению, упомянутому выше
Любая помощь будет оценена*