Kekeliruan:
Apabila melaksanakan pertanyaan SQL daripada fail luaran, sesetengah pembangun mungkin menjadi keliru dengan baris seperti:
result = c.execute("SELECT * FROM %s;" % table);
Penjelasan:
Pemformatan rentetan dalam Python membolehkan kami menggantikan ruang letak (%s) dengan nilai secara dinamik. Dalam kes ini, %s digantikan dengan nilai pembolehubah jadual, iaitu rentetan yang mewakili nama jadual. Jadi, jika jadual ialah 'Haiwan', pertanyaan menjadi "PILIH * DARI Haiwan;".
Menggunakan Kod Yang Diberikan:
Kod Python yang disediakan termasuk fungsi executeScriptsFromFile yang boleh digunakan untuk melaksanakan semua arahan SQL dalam fail luaran.
def executeScriptsFromFile(filename): with open(filename, 'r') as fd: sqlFile = fd.read() sqlCommands = sqlFile.split(';') for command in sqlCommands: try: c.execute(command) except OperationalError as msg: print("Command skipped: ", msg)
Anda boleh menggunakan ini berfungsi untuk melaksanakan pertanyaan SQL dalam fail zookeeper.sql anda:
executeScriptsFromFile('zookeeper.sql')
Pertanyaan 1.1 dan 1.2:
Pertanyaan 1.1 dan 1.2 sudah disertakan dalam penjaga zoo fail .sql. Kod di atas akan melaksanakannya apabila fail dimuatkan.
Kod Lengkap:
Menggabungkan fungsi executeScriptsFromFile dan kod gelung jadual, kod Python lengkap anda boleh dipermudahkan seperti berikut:
import sqlite3 from sqlite3 import OperationalError conn = sqlite3.connect('csc455_HW3.db') c = conn.cursor() executeScriptsFromFile('zookeeper.sql') for table in ['ZooKeeper', 'Animal', 'Handles']: result = c.execute("SELECT * FROM %s;" % table) rows = result.fetchall() print("\n--- TABLE ", table, "\n") for desc in result.description: print(desc[0].rjust(22, ' '), end=',') print() # End the line with column names for row in rows: for value in row: print(str(value).rjust(22, ' ')) print() c.close() conn.close()
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pertanyaan SQL dengan Cekap daripada Fail Luaran dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!