![](/img/trans.png)
[英]How to Update and/or insert to MySQL DB using SQLAlchemy from Python List
[英]How to update records in MySQL using SqlAlchemy python
所以我試圖通過 id 更新數據庫中的記錄。
Cost
數據庫:
table =
id Cost
000074800795 157.05974458228403
000074801136 80.637745302714
000074801299 7
000074800300 13
000074800955 10
我的代碼:
df = pd.DataFrame({ "id": [000074800795 , 000074801136, 000074801299,000074800300, 000074800955] ,
"Cost" : [157.05974458228403 ,80.637745302714, 7, 13, 10] })
# replacing Null
df = df.where((pd.notnull(df)), None)
# reset index for For loop
df = df.reset_index()
df.id = df.id.astype(str)
#df.Cost = df.Cost.astype(str)
df.dtypes
out[101]:
index int64
id object
Cost object
dtype: object
values_list = []
for i in range(len(df)):
values_list.append({ "id": df["id"][i] ,
"Cost": df["Cost"][i] ,
})
print(values_list[0:2])
[{'id': '000074800795', 'Cost': 157.05974458228403}, {'id': '000074801136', 'Cost': 80.637745302714}]
在 db 加載。
我沒有收到任何錯誤,但它應該與 ID 匹配,然后只替換Cost
engine = db.create_engine("my connection")
connection = engine.connect()
metadata = db.MetaData()
# Creating Table
data = db.Table('table', metadata,
db.Column('id', db.String(100), nullable=True),
db.Column('Cost', db.String(100), nullable=True),
extend_existing=True
)
metadata.create_all(engine)
query = db.update(data)
ResultProxy = connection.execute(query, values_list)
engine.dispose()
table =
id Cost
000074800955 10
000074800955 10
000074800955 10
000074800955 10
000074800955 10
您是否將sqlalchemy
導入為 db? 您似乎認為字典可以用作主鍵更新字典,但我不認為它是這樣工作的。 這樣做的一種標准方法是在docs 中,看起來像這樣:
table.update().where(table.c.id==7).values(name='foo')
為此,您需要將表格過濾到一行,然后使用數據框中的數據在該行上運行更新。 否則,如果沒有查詢,db.update 似乎會更新表中的所有內容。
嘗試這樣的事情:
import pandas as pd
import sqlalchemy as db
metadata = db.MetaData()
table = db.Table('table', metadata,
db.Column('id', db.String(100), nullable=True),
db.Column('Cost', db.String(100), nullable=True),
extend_existing=True
)
df = pd.DataFrame({
'id': ['000074800795', '000074801136', '000074801299', '000074800300', '000074800955'],
'Cost': ['157.05974458228403', '80.637745302714', '7', '13', '10']
})
for index, row in df.iterrows():
id_value = row['id']
cost_value = row['Cost']
table.update().where(table.c.id == id_value).values(Cost=cost_value)
我們當然可以對這里的風格進行一些更改,但希望這能指導您朝着正確的方向前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.