SQLite Как разделить таблицу по значениям столбцов? - PullRequest
0 голосов
/ 26 сентября 2018

Я пишу простой сайт по торговле акциями с Flask, изучая, как использовать базу данных SQLite.Когда вошедший в систему пользователь совершает транзакцию (покупка / продажа), я вставляю ее в базу данных transactions с помощью этой команды:

db.execute("INSERT INTO transactions (user_id, symbol, shares, price) VALUES (:user_id, :symbol, :shares, :price)",
           user_id=session["user_id"], symbol=symbol, shares=shares, price=price)

Если пользователь хочет проверить, какие акции у него есть, я простозапросить его из базы данных:

trades = db.execute("SELECT * FROM transactions WHERE user_id = :user_id ORDER BY transaction_id ASC",
                    user_id=session["user_id"])

Но это возвращает мне все транзакции как на покупку, так и на продажу.Я настроил это так, что когда пользователь продает акции, столбец акций будет отрицательным числом.В этот момент мне стало довольно грязно организовывать данные в моем коде.Но я не уверен, стоит ли мне добавлять другую базу данных, поскольку мне также придется вставлять и запрашивать эту базу данных отдельно в моем коде.

Существует ли команда, позволяющая мне разделять транзакции покупки и продажи на две отдельныетаблицы?

Редактировать: опечатка в команде

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы можете выполнить два запроса insert into select ....См. этот SO вопрос о том, как это сделать.

Вам просто нужно запустить первый для транзакций на продажу и еще один для транзакций на покупку.

0 голосов
/ 26 сентября 2018

Можете ли вы просто:

SELECT * FROM transactions WHERE id = :user_id and shares > 0 ORDER BY transaction_id ASC

, чтобы получить принадлежащие им акции, а затем shares < 0, чтобы получить проданные акции?

0 голосов
/ 26 сентября 2018

Если вы хотите показать только ордера на покупку, вам просто нужно отфильтровать запрос select, выбрав все строки, в которых shares являются положительными

trades = db.execute("
    SELECT * FROM transactions 
    WHERE user_id = :user_id AND shares > 0 
    ORDER BY transaction_id ASC",
    user_id=session["user_id"]
)

Однако, если вы хотите показать общее количестводля каждого запаса / символа вы можете использовать предложение group by и суммировать столбец shares.

holdings = db.execute("
    SELECT id, symbol, SUM(shares) 
    FROM transactions 
    WHERE user_id = :user_id
        AND SUM(shares) > 0 -- Edit: Added this so it will only show stocks you own
    GROUP BY symbol 
    ORDER BY transaction_id ASC",
    user_id=session["user_id"]
)

Sidenote : я считаю, что id неверен вваш второй select запрос, и вы имеете в виду user_id (в части WHERE id = :user_id).

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