Как вызвать SQL Серверная хранимая процедура с таким количеством параметров в python? - PullRequest
1 голос
/ 23 января 2020

Я должен вставить записи в таблицу БД с более чем 50 столбцами. Я знаю, как вызвать хранимую процедуру с параметрами в Python следующим образом:

 self.__createConnection()
    proc= "{call faftech..Hns_HolidayCheck (?)}"
    ls=[]
    ls.append(dateTime)
    param= ls
    self.__cursor.execute(proc, param)
    val= self.__cursor.fetchone()
    self.__closeConnection()

Я хочу знать, как лучше всего вставить данные в таблицу с таким количеством столбцов. Я использую pypyOdb c.

Ответы [ 2 ]

2 голосов
/ 31 января 2020

К сожалению, нет простого способа сделать это. Лучший способ - предоставить table_name, column_names и values и создать sql самостоятельно:

def insert_row(self, table_name, column_names, values):
    params = [ '?' ] * len(values)
    params = ','.join(params)
    column_names = [ f'[{x}]' for x in column_names ]
    column_names = ','.join(column_names)
    sql = f'insert into [{table_name}] ({column_names}) values ({params})'
    conn = self.getConnection()
    with conn.cursor() as cursor:
        conn.execute(sql, values)

В качестве альтернативы вы можете отправить в поле ввода column_name s => value s:

def insert_row(self, table_name, values):
    params = [ '?' ] * len(values)
    params = ','.join(params)   
    q, column_names = [], []
    for column_name, value in values.items():
        q.append(value)
        column_names.append(f'[{column_name}]')
    column_names = ','.join(column_names)
    sql = f'insert into [{table_name}] ({column_names}) values ({params})'
    conn = self.getConnection()
    with conn.cursor() as cursor:
        conn.execute(sql, q)

В качестве альтернативы, вы можете использовать django, что упростит управление.

0 голосов
/ 04 февраля 2020

Поскольку столбцов больше 10, рекомендуется создать тип таблицы в SQL и передать таблицу в качестве параметра хранимой процедуре

...