私はPython経由で私のためにいくつかのタスクを行うためにSQLalchemyを取得する作業をしています。Python/SQLalchemy - クエリをトリガする方法は?
私は一種のそれが例に従うことで作業を受けることができますが、私はfor
ループからの問合せの電話を移動するには今しばらく立ち往生されています:テーブルのいずれかを呼び出すことにより、
for instance in session.query(versions_table).filter(versions_table.c.version==Version):
して結果を取得します結果:
existingID = instance.id
(id
が戻ってテーブルのPKである場合)
firiの方法を見つけることです私は何をすることはできませんクエリを自由に実行するか、条件文の結果として実行します。
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"
充実スクリプト:あなたはクエリを実行してインスタンスを返しますされ、Query.all
でクエリを実行することができます
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+mysqldb://u:[email protected]/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)
実際に結果を使用していない場合は、なぜクエリを実行する必要がありますか? – Amber
私は単にそれを発射させようとしていて、それを 'for'ループから切り離そうとしています - 私は何かを行うメソッド' instance.fieldname'を見つけたことを示すコードを含めました。 –
さて、言い換えれば、なぜあなたは「欲しいときに発砲する」必要があるのですか? SQLAlchemyは、クエリを遅れて評価します。つまり、実際に結果が出るまで何かを行うまで待っています(結果が実際に必要ない場合は、実行から時間を節約できます最初のクエリ)。 – Amber