SQLAlchemy: Membongkar Pertanyaan Sebenar
Apabila bekerja dengan SQLAlchemy, ia boleh menjadi berharga untuk memeriksa pertanyaan SQL sebenar yang sedang dilaksanakan. Walaupun SQLAlchemy biasanya bergantung pada parameter bind, terdapat cara untuk menjana pernyataan SQL yang sepadan, termasuk nilai sebenar.
Penyelesaian Umum
Dalam kebanyakan kes, anda boleh dengan mudah dapatkan perwakilan rentetan SQL bagi pernyataan atau pertanyaan SQLAlchemy:
<code class="python">import sqlalchemy as sa print(str(statement))</code>
Ini berfungsi untuk kedua-dua Pertanyaan ORM dan pilih() atau pernyataan lain. Jika perlu, anda boleh menyusun pernyataan itu kepada dialek atau enjin tertentu:
<code class="python">print(statement.compile(someengine))</code>
atau tanpa menyatakan enjin:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
Parameter Terikat Sebaris
Untuk memasukkan nilai sebenar dan bukannya parameter ikatan dalam rentetan SQL, SQLAlchemy menyediakan sokongan terhad melalui bendera 'literal_binds' dalam compile_kwargs:
<code class="python">from sqlalchemy import table, column, select t = table('t', column('x')) s = select([t]).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Walau bagaimanapun, pendekatan ini hanya berfungsi untuk jenis asas dan mungkin tidak mengendalikan parameter ikatan tanpa nilai yang telah ditetapkan. Untuk jenis tersuai, anda boleh melaksanakan TypeDecorator dengan kaedah process_literal_param:
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value</code>
Ini membolehkan anda menyesuaikan pemaparan nilai berdasarkan keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Pertanyaan SQL Sebenar dalam SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!