1

私は、SQLalchemyにPythonを介していくつかのタスクを実行させる作業をしています。

次の例でそれを機能させることができますが、クエリ呼び出しをforループから移動することでしばらく立ち往生しています:

for instance in session.query(versions_table).filter(versions_table.c.version==Version):

テーブルの結果の1つを呼び出して結果を取得します。

 existingID = instance.id

id戻りテーブルのPKはどこにありますか)

私ができないことは、自由に、または条件文の結果として、クエリを実行する方法を見つけることです。

if some conditions met:
 do query
 get / process result

を呼び出すことによってのみ戻り値を取得できますinstance.fieldname

SQLalchemy関数のセットアップ/呼び出し方法に100%慣れていないことを受け入れて、私がどこで間違っているのかを誰かに指摘してもらえますか?

私がやりたいのは、次のようなものです。

for instance in session.query(versions_table).filter(versions_table.c.version==Version):
 if instance.id == True:  #this is not correct
  print instance.id 
 else:
  print "no match"

より完全なスクリプト:

from sqlalchemy import *
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql+mysqldb://u:p@localhost/sqlalchtest',
                   echo=False)

metadata = MetaData(bind=engine)
Session = sessionmaker(bind=engine)
versions_table = Table('versions', metadata, autoload=True)

def doVersionGet(sigfile_filename):
 tree = etree.parse(sigfile_filename)
 root = tree.getroot()
 attributes = root.attrib
 if 'DateCreated' in root.attrib:
  DateCreated = (attributes["DateCreated"])
 if 'Version' in root.attrib:
  Version = (attributes["Version"])
 doVersionPush(DateCreated,Version)

def doVersionPush(DateCreated,Version):
 session = Session() 
 for instance in session.query(versions_table).filter(versions_table.c.version==Version):
  existingID = instance.id 
  #this is not really what I want to do here any way, but this will fire the query every time

if __name__ == "__main__":
 path = "location\sub_sig_files"  ##home_subset for tests
 for (path, dirs, files) in os.walk(path):
  for file in files:
   sigfile_filename = str(path)+"\\"+str(file)
   doVersionGet(sigfile_filename) 
4

1 に答える 1

4

を使用してクエリを実行できますQuery.all。これにより、クエリが実行され、インスタンスが返されます。

instances = session.query(versions_table).filter(versions_table.c.version==Version).all()
于 2012-04-23T07:50:23.763 に答える