Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mencetak Pertanyaan SQL Sebenar dengan Nilai Semasa Penyahpepijatan dalam SQLAlchemy?

Bagaimana untuk Mencetak Pertanyaan SQL Sebenar dengan Nilai Semasa Penyahpepijatan dalam SQLAlchemy?

Mary-Kate Olsen
Lepaskan: 2024-10-18 13:29:03
asal
392 orang telah melayarinya

How to Print Actual SQL Queries with Values During Debugging in SQLAlchemy?

Menyahpepijat Pertanyaan SQLAlchemy: Mencetak SQL Sebenar dengan Nilai

Apabila menyahpepijat ungkapan SQLAlchemy, adalah penting untuk melihat pertanyaan SQL sebenar dilaksanakan, termasuk nilai khusus dan bukannya parameter pengikat . Walaupun SQLAlchemy tidak menyediakan kaedah eksplisit untuk ini, terdapat beberapa cara untuk mencapainya.

Pendekatan Umum

Dalam kebanyakan kes, anda hanya boleh memanggil str() pada pernyataan SQLAlchemy atau pertanyaan:

print(str(statement))
Salin selepas log masuk

Ini berfungsi untuk kedua-dua pertanyaan ORM (objek pertanyaan) dan pernyataan SQL tulen (select(), dll.).

Kompilasi Khusus Enjin

Jika anda memerlukan penyata yang disusun untuk enjin pangkalan data tertentu, anda boleh menggunakan kaedah compile():

print(statement.compile(some_engine))
Salin selepas log masuk

Atau, jika anda tidak mempunyai enjin, anda boleh menentukan dialek:

from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))
Salin selepas log masuk

Parameter Terikat Sebaris

Dalam keadaan tertentu, anda mungkin mahu menyelaraskan parameter terikat ke dalam rentetan SQL akhir. Ini boleh dicapai menggunakan bendera literal_binds:

print(statement.compile(compile_kwargs={"literal_binds": True}))
Salin selepas log masuk

Perhatikan bahawa ini hanya disokong untuk jenis asas seperti integer dan rentetan. Untuk jenis yang lebih kompleks, anda mungkin perlu mencipta penghias jenis tersuai.

Penghias Jenis Tersuai

Untuk menyokong pemaparan sebaris jenis yang tidak disokong, anda boleh mencipta penghias jenis tersuai dengan kaedah process_literal_param:

class MyFancyType(TypeDecorator):
    ...
    def process_literal_param(self, value, dialect):
        return f"my_fancy_formatting({value})"
Salin selepas log masuk

Dengan penghias ini, anda boleh menyelaraskan nilai kompleks:

print(tab.select().where(tab.c.x > 5).compile(compile_kwargs={"literal_binds": True}))
Salin selepas log masuk

menghasilkan output seperti:

SELECT mytable.x
FROM mytable
WHERE mytable.x > my_fancy_formatting(5)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Pertanyaan SQL Sebenar dengan Nilai Semasa Penyahpepijatan 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