我正在创建一个基于网络的POS系统。一旦用户点击"订单提交"使用此模式将每个项目发送到sqlite数据库:
drop table if exists orders;
create table orders (
transaction_id integer primary key autoincrement,
total_price integer not null,
SKU integer not null,
product_name text not null,
unit_price integer not null,
quantity integer not null
);
通过这个烧瓶代码:
@app.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
data = request.get_json()
for group in groupby(data, itemgetter('name')):
id, data_list = group
for d in data_list:
print d['subtotal']
db = get_db()
order = db.execute('insert into orders (total_price, SKU, product_name, unit_price, quantity) values (?, ?, ?, ?, ?)',
[d['subtotal'], d['sku'], d['name'], d['price'], d['quantity']])
db.commit()
return jsonify(location=url_for('thankyou'))
当我最初创建架构时,我认为transaction_id integer primary key autoincrement
对于交易ID(附加到订单中每个项目的ID)就足够了,但有点忘记了可能有多个项目订购。所以现在,每件商品都拥有自己的主键,这不是我想要的。一个订单的sqlite3输出如下所示:
1|61.45|ASD|Hot Sauce|10.99|1
2|61.45|JKL|Chilli Peppers|8.99|1
3|61.45|UIO|Sip 'n' Sizzle T-Shirt|10.5|1
我希望第一列中的所有内容都是1.我可以对我的架构做些什么来实现我想要的操作吗?我不太确定最好的方法。
答案 0 :(得分:1)
规范化您的数据库。 将所有重复信息放入一个表中,并将每个项目更改的所有信息放入另一个表中:
CREATE TABLE orders (
transaction_id integer primary key autoincrement,
total_price integer not null
);
CREATE TABLE order_items (
transaction_id integer REFERENCES orders(transaction_id),
SKU integer not null,
product_name text not null,
unit_price integer not null,
quantity integer not null
);