Определение функции в Python для вставки даты в таблицу SQLite? - PullRequest
0 голосов
/ 11 июля 2020

Итак, я новичок в мире программирования, я изучил основы python и перехожу к попытке использовать python и sqlite для создания небольшой программы.

I прочитал документацию по SQLite, и я понимаю, как вставлять и вызывать данные, но для того, чтобы делать это несколько раз, похоже, что для выполнения sh используется функция, это логический ответ, и именно здесь я наткнулся на препятствие.

До сих пор это то, что я придумал, основываясь на моей собственной интуиции, пытаясь перевести код в функцию:

i_date = input('Input Date as YYYY-MM-DD > ')
i_trans = input('Select Buy or Sell >')
i_symbol = input('Input Stock Ticker > ')
i_qty = input('Input Qty to be Purchased > ')
i_price = input('Input Buy/Sell Price > ')

update_tbl = ('i_date' + 'i_trans' + 'i_symbol' + 'i_qty' + 'i_price')


def update_table(date, trans, symbol, qty, price):
    c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', update_tbl)

update_table(update_tbl)

Результат таков, что он определенно проходит дату функции, но только самый первый элемент. Он генерирует следующую ошибку:

Traceback (most recent call last):
  File "SQL.py", line 25, in <module>
    update_table(update_tbl)
TypeError: update_table() missing 4 required positional arguments: 'trans', 'symbol', 'qty', 
and 'price'

Я не уверен, связана ли ошибка с тем, как я добавляю все переменные вместе как одну переменную в update_tbl, или если ошибка связана с тем, как я ее передаю перейдем к функции. Первоначально я пробовал разделять каждую переменную только запятыми, и результат был тот же.

Может ли кто-нибудь указать мне в правильном направлении?

РЕДАКТИРОВАТЬ: Пока что это единственное, что мне удалось успешно передать параметры функции:

i_date = input('Input Date as YYYY-MM-DD > ')
i_trans = input('Select Buy or Sell > ')
i_symbol = input('Input Stock Ticker > ')
i_qty = input('Input Qty to be Purchased > ')
i_price = input('Input Buy/Sell Price > ')

update_tbl = [i_date, i_trans, i_symbol, i_qty, i_price]


def update_table(date, trans, symbol, qty, price):
    c.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', update_tbl)

update_table(i_date, i_trans, i_symbol, i_qty, i_price)

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Создайте update_tbl внутри функции с параметрами, которые вы передаете функции. Проблема с вашим первым решением заключается в том, что вы создаете список из 1 элемента. Это потому, что вы объединяете все входные данные в одну строку.

i_date = input('Input Date as YYYY-MM-DD > ')
i_trans = input('Select Buy or Sell > ')
i_symbol = input('Input Stock Ticker > ')
i_qty = input('Input Qty to be Purchased > ')
i_price = input('Input Buy/Sell Price > ')


def update_table(date, trans, symbol, qty, price):
    update_tbl = [date, trans, symbol, qty, price]
    c.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', update_tbl)


update_table(i_date, i_trans, i_symbol, i_qty, i_price)
0 голосов
/ 11 июля 2020

Итак, запрос SQLite в целом выглядит следующим образом:

INSERT INTO table (column1,column2 ,..) VALUES( value1, value2 ,...)

Для вас это будет:

update_tbl = [i_date, i_trans, i_symbol, i_qty, i_price] #save variables into a list

def update_table(update_tbl):
    c.execute(f'INSERT INTO stocks (column1, column2, column3, column4, column5) VALUES({update_tbl[0]}, {update_tbl[1]}, {update_tbl[2]}, {update_tbl[3]}, {update_tbl[4]})')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...