python - SQLite 如何按列值分隔表?
问题描述
我正在使用 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"])
但这让我恢复了买卖的所有交易。我设置的方式是,当用户卖出股票时,shares 列将为负数。在这一点上,我在代码中组织数据变得非常混乱。但我不确定是否应该添加另一个数据库,因为我还必须在我的代码中单独插入和查询该数据库。
是否有一个命令可以让我将买卖交易分成两个单独的表?
编辑:命令中的错字
解决方案
如果您只想显示买单,您只需要通过获取所有为正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"]
)
旁注:我相信你的第二个查询id
是错误的,你的意思是(在部分)。select
user_id
WHERE id = :user_id
推荐阅读
- php - 将 python 中的 SSL 套接字迁移到 PHP
- openssh - Cannot start openssh in Windows Server 2016
- c# - 如何将具有多个客户数据的主 SQL Server 数据库同步到单个客户数据库
- html - how to render a HTML template through django REST APIView?
- php - How to create the multi-level url in Codeigniter?
- r - 使用无头 phantomjs 浏览器在 Raspberry pi 上运行 RSelenium
- mysql - 如何隔离 Galera 节点进行更新?
- mysql - 如何更改我在 INNER JOIN 后收到的列的名称
- node.js - 当 grunt build 正在执行时,如何在 jenkins 作业中通过 bower.json 克隆 gitlab 存储库?
- javascript - 有没有办法在 MapView.animateToRegion 方法停止后调用函数