On 7/17/15 5:02 AM, Chengjun JIN wrote:
Hi all,

I am trying to add new rows into an existing many to one database via sqlalchemy ORM.

What I am doing now(it seems working):
# The many to one relationship is:
stock = relationship('Stock', backref=backref('historicalprices', order_by=id))

# query an object
stock = session.query(Stock).filter_by(code='00001').one()

# add row
stock.historicalprices.append([something])
session.add(stock)

The problem is that it is too slow to query one object. Is there a fast/standard way to do this?

I'm assuming you have a lot of Stock objects to query. You can get a bunch of stock objects in batch like this:

stocks = dict(
    session.query(Stock.code, Stock).all()
)


for something in somethings:
    stock = stocks[something.desired_code]
something.stock = stock # assign on the many-to-one side so that you don't need to load 'historicalprices'

# add() shouldn't be needed
session.commit()


you can also batch this in subsets of Stock objects:


while somethings:
      batch = somethings[0:1000]
      somethings = somethings[1000:]
      stock_codes = set([something.desired_code for something in batch])
      stocks = dict(
session.query(Stock.code, Stock).filter(Stock.code.in_(stock_codes)).all()
      )

      for something in batch:
           # ... same code as before








Thanks,
Chengjun






--
You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com <mailto:sqlalchemy+unsubscr...@googlegroups.com>. To post to this group, send email to sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to