Bagaimana cara memperbarui informasi baris?
Misalnya saya ingin mengubah kolom nama dari baris yang memiliki id 5.
python
sqlalchemy
flask-sqlalchemy
pocorschi
sumber
sumber
uesd_at = db.Column(db.DateTime)
Saya baru saja menjalankanobj.used_at = datetime.datetime.now()
db.session.commit()
Tapi tidak menetapkan nilai ke lapangan.Ada metode
update
pada objek BaseQuery di SQLAlchemy, yang dikembalikan olehfilter_by
.Keuntungan menggunakan
update
lebih dari perubahan entitas datang ketika ada banyak objek yang akan diperbarui.Jika Anda ingin memberikan
add_user
izin kepada semuaadmin
,Perhatikan bahwa
filter_by
mengambil argumen kata kunci (gunakan hanya satu=
) sebagai lawanfilter
yang mengambil ekspresi.sumber
admin
, yang mungkin menyesatkan karena hasilnya adalah jumlah baris yang diperbarui. Bukan?User
item yang terpengaruh oleh kueri, bukan jumlah pengguna yang terpengaruh?Ini tidak bekerja jika Anda mengubah atribut acar model. Atribut acar harus diganti untuk memicu pembaruan:
sumber
data
dan menetapkannya kembali.user.data = data
Hanya menetapkan nilai dan menerapkannya akan berfungsi untuk semua tipe data kecuali atribut JSON dan Acar. Karena jenis acar dijelaskan di atas, saya akan mencatat cara yang sedikit berbeda tetapi mudah untuk memperbarui JSON.
Misalkan modelnya seperti di atas.
Ini akan menambahkan pengguna ke dalam database MySQL dengan data {"country": "Sri Lanka"}
Mengubah data akan diabaikan. Kode saya yang tidak berfungsi adalah sebagai berikut.
Alih-alih melalui pekerjaan menyakitkan menyalin JSON ke dict baru (tidak menugaskannya ke variabel baru seperti di atas), yang seharusnya berhasil, saya menemukan cara sederhana untuk melakukannya. Ada cara untuk menandai sistem yang telah diubah JSON.
Berikut ini adalah kode kerja.
Ini bekerja seperti pesona. Ada metode lain yang diusulkan bersama dengan metode ini di sini Harapan saya telah membantu seseorang.
sumber
db.session.merge(user)
menambahkan kode ini berhasil untuk saya, FYI.