Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mendapatkan Pertanyaan SQL Sebenar yang Dilaksanakan dalam SQLAlchemy?
Mencetak Pertanyaan SQL Sebenar dalam SQLAlchemy
Melaksanakan pertanyaan SQL dalam SQLAlchemy melibatkan parameter mengikat untuk mengelakkan serangan suntikan SQL. Walau bagaimanapun, mendapatkan pertanyaan SQL sebenar, termasuk nilai, boleh mencabar.
Penyelesaian Umum
Kaedah paling mudah untuk mendapatkan kembali pertanyaan SQL sebagai rentetan adalah dengan menggunakan fungsi str():
<code class="python">print(str(statement)) # for both ORM Query and SQL statements</code>
Pelaksanaan Parameter Terikat
Secara lalai, SQLAlchemy mengikat parameter atas sebab keselamatan. Anda boleh menyekat tingkah laku ini menggunakan bendera literal_binds dalam compile_kwargs:
<code class="python">from sqlalchemy.dialects import postgresql print( statement.compile(compile_kwargs={"literal_binds": True}) )</code>
Perhatikan bahawa pengikatan literal hanya disokong untuk jenis asas seperti integer dan rentetan.
Menyesuaikan Penukaran Parameter
Jika anda perlu menukar jenis yang lebih kompleks, anda boleh mencipta TypeDecorator tersuai dengan kaedah process_literal_param:
<code class="python">class MyFancyType(TypeDecorator): impl = Integer 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>
Ini akan menghasilkan pertanyaan seperti:
<code class="sql">SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)</code>
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Pertanyaan SQL Sebenar yang Dilaksanakan dalam SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!