Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Mary-Kate Olsenasal
2024-10-18 13:29:03274semak imbas

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))

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))

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

from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))

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}))

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})"

Dengan penghias ini, anda boleh menyelaraskan nilai kompleks:

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

menghasilkan output seperti:

SELECT mytable.x
FROM mytable
WHERE mytable.x > my_fancy_formatting(5)

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!

Kenyataan:
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