私はPythonでSQLを実行する方法を学習しています(私はPythonではなくSQLを知っています)。Pythonで外部SQLスクリプトを読む
私は外部のsqlファイルを持っています。 'Zookeeper'、 'Handles'、 'Animal'の3つのテーブルにデータを作成して挿入します。
次に、テーブルを実行するための一連のクエリがあります。以下のクエリは、私がpythonスクリプトの先頭にロードするzookeeper.sqlファイルにあります。最初の2のための例は以下のとおりです。
--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;
これらはすべてSQLで正常に実行されます。今はPython内からそれらを実行する必要があります。私は与えられており、ファイルを読むためのコードを完成しました。次に、ループ内のすべてのクエリを実行します。
1.1と1.2が混乱しています。私はループの中で、最初と2番目のクエリーを実行するために何かを入れなければならない行だと考えています。
result = c.execute( "SELECT * FROM%s;"%table);
でも何ですか?私は非常に明白な何かを見逃していると思う。私は私を捨てているのは%テーブルだと思う。クエリ1.1と1.2では、テーブルを作成するのではなく、クエリ結果を探しています。
私のPythonコード全体は以下の通りです。
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()
実行するSQLクエリは、1.1と1.2、またはすべてのテーブルからすべてを取得する必要がありますか? – Azeirah
.sqlファイルから1.1と1.2(と私は約6他を持っている)を実行したい。 – mpg
私は少し速すぎると思います。コードを理解する助けが必要なのですか、何か特別なことをするためにコードを編集するのに助けが必要ですか? – Azeirah