Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mendapatkan Pertanyaan SQL Sebenar yang Dilaksanakan dalam SQLAlchemy?

Bagaimana untuk Mendapatkan Pertanyaan SQL Sebenar yang Dilaksanakan dalam SQLAlchemy?

Mary-Kate Olsen
Lepaskan: 2024-10-18 13:15:03
asal
1102 orang telah melayarinya

How to Obtain the Actual SQL Query Executed in 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Ini akan menghasilkan pertanyaan seperti:

<code class="sql">SELECT mytable.x
FROM mytable
WHERE mytable.x > my_fancy_formatting(5)</code>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan