Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Strategi pembaruan massal SQLAlchemy

Apa yang Anda lakukan pada dasarnya adalah melewati ORM untuk mengoptimalkan kinerja. Oleh karena itu, jangan kaget bahwa Anda "meniru pekerjaan yang dilakukan ORM" karena memang itulah yang perlu Anda lakukan.

Kecuali Anda memiliki banyak tempat di mana Anda perlu melakukan pembaruan massal seperti ini, saya akan merekomendasikan pendekatan acara magis; hanya menulis kueri eksplisit jauh lebih mudah.

Apa yang saya sarankan lakukan adalah menggunakan SQLAlchemy Core alih-alih ORM untuk melakukan pembaruan:

ledger = Table("ledger", db.metadata,
    Column("wallet_id", Integer, primary_key=True),
    Column("new_balance", Float),
    prefixes=["TEMPORARY"],
)


wallets = db_session.query(Wallet).all()

# figure out new balances
balance_map = {}
for w in wallets:
    balance_map[w.id] = calculate_new_balance(w)

# create temp table with balances we need to update
ledger.create(bind=db.session.get_bind())

# insert update data
db.session.execute(ledger.insert().values([{"wallet_id": k, "new_balance": v}
                                           for k, v in balance_map.items()])

# perform update
db.session.execute(Wallet.__table__
                         .update()
                         .values(balance=ledger.c.new_balance)
                         .where(Wallet.__table__.c.id == ledger.c.wallet_id))

# drop temp table
ledger.drop(bind=db.session.get_bind())

# commit changes
db.session.commit()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara terhubung ke mysql dengan laravel?

  2. Cara mereset/mengubah baris perintah kata sandi root MySql di ubuntu linux

  3. Tidak Dapat Membuat Model Data Entitas - menggunakan MySql dan EF6

  4. MySql Modifikasi pohon preorder untuk membuat url

  5. Dapatkan data tambahan ke dalam pilihan dropdown formulir Django