iT邦幫忙

1

python: sql 將同筆資料寫入兩個不同表單

2022-09-18 12:33:091229 瀏覽
  • 分享至 

  • xImage

各位大神好~
最近嘗試使用django架設購物車網站
嘗試將同一筆訂單資料 寫入兩個不同的表單裡面
第一個order 是寫整個訂單的金額 聯絡人等
第二個detail 是寫訂單的詳細資料 商品明和數量等
使用oID作為兩個表單的關聯性

但我將訂單送出時,卻都只會寫入一個表單而已
嘗試用兩次將資料分別寫進去
也是失敗 無法寫進去
![https://drive.google.com/file/d/1TpmsY5wJqZb-Vs-2lShMC_yWqylIfEpm/view?usp=sharing]
![https://drive.google.com/file/d/18KHIunr0qmApgW97d6Gxle5jWHwlNhSr/view?usp=sharing]

		#建立訂單 寫入order資料庫內
		db = pymysql.connect(host="127.0.0.1", user="user",passwd="user12345",database="store")
		db.autocommit(1)
		cursor = db.cursor()
		sql = "insert into orders (subtotal,shipping,grandtotal,customname,customemail,customaddress,customphone,paytype) values ('{}','{}',{},'{}','{}','{}',{},'{}')".\
		format(total,60,grandtotal,customname,customemail,customaddress,customphone,paytype)
		cursor.execute(sql)
		orderid = cursor.lastrowid #讀取最新資料的自動產生id
		db.commit()  #寫入order資料庫內
		db.close() #關閉資料庫	
		for unit in cartlist:   #將購買商品寫入資料庫
			db1 = pymysql.connect(host="127.0.0.1", user="user",passwd="user12345",database="store")
			db1.autocommit(1) #參考 https://kknews.cc/zh-tw/code/8ge8zmn.html
			total = int(unit[1]) * int(unit[2])
			cursor1 = db.cursor()
			sql = "insert into detail (oID,dorder,pname,unitprice,quantity,dtotal) values ('{}','{}',{},'{}','{}')".\
			format(orderid,unit[0],unit[1],unit[2],total)
			cursor1.execute(sql)
			db.commit() #寫入dtail資料庫內
			db.close() #關閉資料庫	

想請問各位大神是我哪邊有遺漏掉嗎? 感謝您~

froce iT邦大師 1 級 ‧ 2022-09-19 00:12:05 檢舉
幹嘛不用 Django 的ORM...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
熊熊工程師
iT邦研究生 2 級 ‧ 2022-09-18 12:55:47

兩個問題

  1. 你的 cartlist 是從哪裡來的? 或許可以先 print(cartlist) 確認 cartlist 內有東西
  2. 你在迴圈裏面又開了一個 db 連線且命名為 db1,然而你在迴圈最後兩行用的 commit 卻是 db 這樣是不會 commit 任何東西進去的

另外看了你的程式碼,有發現你的兩個 db connection 都是一樣的,如果是這樣的話其實不需要在迴圈裡面再創一個 connection 可以直接使用同一個 db 進型操作,像是這樣

#建立訂單 寫入order資料庫內
db = pymysql.connect(host="127.0.0.1", user="user",passwd="user12345",database="store")
db.autocommit(1)
cursor = db.cursor()

sql = "你的 sql 語法"
cursor.execute(sql)
orderid = cursor.lastrowid #讀取最新資料的自動產生id
db.commit()  #寫入order資料庫內

for unit in cartlist:   #將購買商品寫入資料庫
    total = int(unit[1]) * int(unit[2])
    sql = "你的 sql 語法"
    cursor.execute(sql)
    db.commit() #寫入dtail資料庫內

db.close()

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-18 15:32:53

改這樣試試看

#建立訂單 寫入order資料庫內
db=pymysql.connect(host="127.0.0.1",user="user",passwd="user12345",database="store")
db.autocommit(1)

cursor = db.cursor()
sql = "insert into orders (subtotal,shipping,grandtotal,customname,customemail,customaddress,customphone,paytype) values ('{}','{}',{},'{}','{}','{}',{},'{}')".\
format(total,60,grandtotal,customname,customemail,customaddress,customphone,paytype)
cursor.execute(sql)
orderid = cursor.lastrowid #讀取最新資料的自動產生id
db.commit()  #寫入order資料庫內

for unit in cartlist:   #將購買商品寫入資料庫
    total = int(unit[1]) * int(unit[2])
    cursor1 = db.cursor()
    sql = "insert into detail (oID,dorder,pname,unitprice,quantity,dtotal) values ('{}','{}',{},'{}','{}')".\
    format(orderid,unit[0],unit[1],unit[2],total)
    cursor1.execute(sql)
    db.commit() #寫入dtail資料庫內

db.close() #關閉資料庫

我要發表回答

立即登入回答