Mendapatkan kembali Pertanyaan SQL dalam SQLAlchemy dengan Nilai Sebenar
Apabila menggunakan SQLAlchemy, ia boleh berguna untuk mencetak pertanyaan SQL sebenar yang sedang dilaksanakan, termasuk nilai khusus yang digunakan, bukannya parameter ikatan abstrak.
Begini cara untuk mencapai ini dalam SQLAlchemy:
<code class="python">print(str(statement))</code>
Pendekatan mudah ini berfungsi untuk kedua-dua objek ORM Query dan pilih() atau jenis pernyataan lain. Jika anda ingin mendapatkan pertanyaan seperti yang dikompilasi kepada dialek atau enjin tertentu, anda boleh menghantar argumen yang sesuai untuk menyusun():
<code class="python">print(statement.compile(someengine)) print(statement.compile(dialect=postgresql.dialect()))</code>
Apabila menggunakan objek ORM Query, mula-mula akses pengakses .statement ke dapatkan kaedah compile():
<code class="python">statement = query.statement print(statement.compile(someengine))</code>
Dalam kes di mana anda perlu menyelaraskan parameter terikat ke dalam rentetan akhir, SQLAlchemy mempunyai sokongan terhad untuk ini. Anda boleh menggunakan bendera 'literal_binds' apabila memanggil compile():
<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Walau bagaimanapun, ini hanya berfungsi untuk jenis mudah seperti integer dan rentetan. Untuk jenis tersuai, anda perlu menggunakan TypeDecorator dengan kaedah TypeDecorator.process_literal_param untuk menyediakan pemformatan tersuai:
<code class="python">print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>
Pendekatan ini membenarkan pemaparan sebaris jenis tersuai dalam rentetan pertanyaan SQL yang terhasil.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Pertanyaan SQL dalam SQLAlchemy dengan Nilai Sebenar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!