Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQLAlchemy बल्क अपडेट रणनीतियाँ

प्रदर्शन को अनुकूलित करने के लिए आप जो अनिवार्य रूप से कर रहे हैं वह ओआरएम को छोड़कर है। इसलिए, आश्चर्यचकित न हों कि आप "ओआरएम द्वारा किए जा रहे कार्य को दोहरा रहे हैं" क्योंकि ठीक यही आपको करने की आवश्यकता है।

जब तक आपके पास बहुत सारे स्थान नहीं हैं जहां आपको इस तरह के थोक अपडेट करने की आवश्यकता है, मैं जादुई घटना दृष्टिकोण के खिलाफ अनुशंसा करता हूं; केवल स्पष्ट प्रश्नों को लिखना अधिक सरल है।

मैं जो करने की सलाह देता हूं वह अद्यतन करने के लिए ORM के बजाय SQLAlchemy Core का उपयोग कर रहा है:

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. स्थानीय परीक्षण के लिए MySQL इंस्टॉलेशन कैसे बनाएं

  2. mysql_real_escape_string () पूरी तरह से स्ट्रिंग को हटा देता है

  3. MySQL में डालने पर PHP में सिंगल कोट से बचना

  4. PHP डेटाबेस आउटपुट सही तरीका नहीं दिखा रहा है

  5. पीडीओ बहुत अधिक रिकॉर्ड, बफर किए गए प्रश्नों के साथ विफल रहा