私は、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)