Tôi đang nghiên cứu cách thực hiện SQL trong python (tôi biết SQL, không phải Python).đọc kịch bản sql bên ngoài trong python
Tôi có tệp sql bên ngoài. Nó tạo và chèn dữ liệu vào ba bảng 'Zookeeper', 'Handles', 'Animal'.
Sau đó, tôi có một loạt truy vấn để chạy các bảng. Các truy vấn dưới đây nằm trong tệp zookeeper.sql mà tôi tải ở đầu tập lệnh python. Ví dụ cho hai người đầu tiên là:
--1.1
SELECT ANAME,zookeepid
FROM ANIMAL, HANDLES
WHERE AID=ANIMALID;
--1.2
SELECT ZNAME, SUM(TIMETOFEED)
FROM ZOOKEEPER, ANIMAL, HANDLES
WHERE AID=ANIMALID AND ZOOKEEPID=ZID
GROUP BY zookeeper.zname;
Những bài thi tốt trong SQL. Bây giờ tôi cần thực thi chúng từ bên trong Python. Tôi đã được cung cấp và hoàn thành mã để đọc trong tập tin. Sau đó, thực hiện tất cả các truy vấn trong vòng lặp.
1,1 và 1,2 là nơi tôi bị nhầm lẫn. Tôi tin rằng trong vòng lặp này là dòng mà tôi nên đặt trong một cái gì đó để chạy truy vấn đầu tiên và sau đó thứ hai.
kết quả = c.execute ("SELECT * FROM% s;"% table);
nhưng sao? Tôi nghĩ rằng tôi đang thiếu một cái gì đó rất rõ ràng. Tôi nghĩ những gì đang ném tôi ra là% bảng. Trong truy vấn 1.1 và 1.2, tôi không tạo bảng, mà là tìm kết quả truy vấn.
Toàn bộ mã trăn của tôi ở bên dưới.
import sqlite3
from sqlite3 import OperationalError
conn = sqlite3.connect('csc455_HW3.db')
c = conn.cursor()
# Open and read the file as a single buffer
fd = open('ZooDatabase.sql', 'r')
sqlFile = fd.read()
fd.close()
# all SQL commands (split on ';')
sqlCommands = sqlFile.split(';')
# Execute every command from the input file
for command in sqlCommands:
# This will skip and report errors
# For example, if the tables do not yet exist, this will skip over
# the DROP TABLE commands
try:
c.execute(command)
except OperationalError, msg:
print "Command skipped: ", msg
# For each of the 3 tables, query the database and print the contents
for table in ['ZooKeeper', 'Animal', 'Handles']:
**# Plug in the name of the table into SELECT * query
result = c.execute("SELECT * FROM %s;" % table);**
# Get all rows.
rows = result.fetchall();
# \n represents an end-of-line
print "\n--- TABLE ", table, "\n"
# This will print the name of the columns, padding each name up
# to 22 characters. Note that comma at the end prevents new lines
for desc in result.description:
print desc[0].rjust(22, ' '),
# End the line with column names
print ""
for row in rows:
for value in row:
# Print each value, padding it up with ' ' to 22 characters on the right
print str(value).rjust(22, ' '),
# End the values from the row
print ""
c.close()
conn.close()
Bạn đang thực thi truy vấn SQL nào, các truy vấn 1.1 và 1.2, hoặc chỉ lấy mọi thứ từ mọi bảng? – Azeirah
Tôi muốn chạy 1.1 và 1.2 (cộng với tôi có khoảng 6 người khác) từ tệp .sql. – mpg
Tôi đang đi một chút quá nhanh Tôi tin rằng, bạn cần giúp đỡ để hiểu mã hoặc bạn cần giúp chỉnh sửa mã của bạn để làm một cái gì đó thêm? – Azeirah