SQLAlchemy Core - Menggunakan Textual SQL

SQLAlchemy memungkinkan Anda hanya menggunakan string, untuk kasus-kasus ketika SQL sudah dikenal dan tidak ada kebutuhan kuat akan pernyataan untuk mendukung fitur dinamis. Konstruksi text () digunakan untuk membuat pernyataan tekstual yang diteruskan ke database sebagian besar tidak berubah.

Ini membangun yang baru TextClause, mewakili string SQL tekstual secara langsung seperti yang ditunjukkan pada kode di bawah ini -

from sqlalchemy import text
t = text("SELECT * FROM students")
result = connection.execute(t)

Keuntungannya text() menyediakan lebih dari string biasa adalah -

  • dukungan backend-netral untuk parameter mengikat
  • opsi eksekusi per pernyataan
  • perilaku pengetikan kolom hasil

Fungsi text () membutuhkan parameter Terikat dalam format titik dua bernama. Mereka konsisten terlepas dari backend database. Untuk mengirim nilai untuk parameter, kami meneruskannya ke metode execute () sebagai argumen tambahan.

Contoh berikut menggunakan parameter terikat dalam SQL tekstual -

from sqlalchemy.sql import text
s = text("select students.name, students.lastname from students where students.name between :x and :y")
conn.execute(s, x = 'A', y = 'L').fetchall()

Fungsi text () menyusun ekspresi SQL sebagai berikut -

select students.name, students.lastname from students where students.name between ? and ?

Nilai x = 'A' dan y = 'L' dilewatkan sebagai parameter. Hasilnya adalah daftar baris dengan nama antara 'A' dan 'L' -

[('Komal', 'Bhandari'), ('Abdul', 'Sattar')]

Konstruksi text () mendukung nilai terikat yang telah ditetapkan sebelumnya menggunakan metode TextClause.bindparams (). Parameter juga dapat diketik secara eksplisit sebagai berikut -

stmt = text("SELECT * FROM students WHERE students.name BETWEEN :x AND :y")

stmt = stmt.bindparams(
   bindparam("x", type_= String), 
   bindparam("y", type_= String)
)

result = conn.execute(stmt, {"x": "A", "y": "L"})

The text() function also be produces fragments of SQL within a select() object that 
accepts text() objects as an arguments. The “geometry” of the statement is provided by 
select() construct , and the textual content by text() construct. We can build a statement 
without the need to refer to any pre-established Table metadata. 

from sqlalchemy.sql import select
s = select([text("students.name, students.lastname from students")]).where(text("students.name between :x and :y"))
conn.execute(s, x = 'A', y = 'L').fetchall()

Anda juga bisa menggunakan and_() fungsi untuk menggabungkan beberapa kondisi di klausa WHERE dibuat dengan bantuan fungsi text ().

from sqlalchemy import and_
from sqlalchemy.sql import select
s = select([text("* from students")]) \
.where(
   and_(
      text("students.name between :x and :y"),
      text("students.id>2")
   )
)
conn.execute(s, x = 'A', y = 'L').fetchall()

Kode di atas mengambil baris dengan nama antara "A" dan "L" dengan id lebih besar dari 2. Output kode diberikan di bawah ini -

[(3, 'Komal', 'Bhandari'), (4, 'Abdul', 'Sattar')]