Форматирование параметров запроса: jayDeBeApi и pandas.read_sql не возвращает результаты для запросов с подстановочными знаками - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь отправить запрос в базу данных Teradata через скрипт python с использованием пакета jaydebapi.В прошлом у меня не было проблем с извлечением данных, пока я не попытался использовать подстановочный знак в выражении like

SELECT .... FROM TABLE WHERE column LIKE 'value%'

JayDeBeApi говорит, что этот пакет обеспечиваетPython DB-API v2.0 подключение к базе данных.Глядя на использование параметра (и пробуя много разных комбинаций форматирования строк параметров), я не собираю никаких записей.

Однако, когда я запускаю этот запрос в Teradata SQL Assistant, я нахожу записи.

Как правильно отправить запрос с параметром, который имеет подстановочный знак?

Вот мой код:

import jaydebeapi
import pandas as pd
from tabulate import tabulate

jars = ['C:\\Users\\<path to TD jars>\\tdgssconfig.jar', 'C:\\Users\\<path to TD jars>\\terajdbc4.jar']
user = 'USER_NAME'
password = "PASSWORD"
jclassname = 'com.teradata.jdbc.TeraDriver'
url = "jdbc:teradata://<URL_TO_DB>/LOGMECH=LDAP,TMODE=ANSI,CHARSET=UTF8"
driver_args = [url, user, password]

class Teradata(object):
    def __init__(self):
        self.conn = jaydebeapi.connect(jclassname, driver_args, jars)
        self.cursor = self.conn.cursor()

def search_by_base_address(account):
    td = Teradata()
    address1 = account.base_address
    city = account.city
    state = account.state

    q = ''' 
        SELECT 
        BUSINESS_NAME, 
        SECONDARY_NAME, 
        STREET_ADDR, 
        STREET_ADDR2, 
        CITY, 
        STATE, 
        POSTAL_CD, 
        FROM DB.TABLE
        WHERE STREET_ADDR LIKE ?
        AND CITY = '{}'
        AND STATE = '{}';
            '''.format(city, state)
    if len(address1) > 1:
        result = pd.read_sql(q, td.conn, params=(address1+"%",))
        print(tabulate(result, headers='keys', tablefmt='psql'))
    else:
        print('No base address to search')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...