Mencetak Pertanyaan SQL Sebenar dalam SQLAlchemy
Dalam SQLAlchemy, adalah penting untuk memahami cara memaparkan SQL mentah yang sepadan dengan operasi pangkalan data anda . Ini penting untuk menyelesaikan masalah, menyahpepijat dan mengoptimumkan komunikasi pangkalan data aplikasi anda.
Pendekatan Umum
Dalam kebanyakan kes, anda boleh melihat perwakilan rentetan SQL bagi pernyataan dengan mudah atau pertanyaan dengan:
<code class="python">print(str(statement))</code>
Ini terpakai pada Pertanyaan ORM dan ungkapan pilih() mentah.
Menyusun kepada Dialek Tertentu
Jika anda perlu melihat SQL yang disusun untuk dialek atau enjin tertentu, anda boleh menggunakan kaedah compile():
<code class="python">print(statement.compile(someengine))</code>
atau tanpa enjin:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
Inlining Parameter Terikat
Tingkah laku lalai dalam SQLAlchemy ialah menggunakan parameter ikatan dalam rentetan SQL, memastikan keselamatan dengan menghalang serangan suntikan SQL. Untuk memintas parameter terikat dan nilai sebenar sebaris, gunakan bendera literal_binds dalam compile_kwargs:
<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Untuk jenis tersuai yang tidak disokong oleh pendekatan ini, laksanakan TypeDecorator dengan kaedah process_literal_param untuk memastikan pemaparan sebaris:
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>
Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Pertanyaan SQL Sebenar dalam SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!