# Execute SQL query test_file.sql"
您還沒有執行從文件中的SQL查詢。您正在執行SQL查詢"SELECT test_file"
。
"SELECT test_file"
對於SELECT
查詢是無效的SQL語法。 See this tutorial on the SELECT
statement.
rows = curs.fetchall(); for row in rows: ...
不是迭代查詢的所有結果的好方法。
- 如果您的查詢返回大量行,比如說一百萬行,那麼在循環啓動之前,所有一百萬行都必須從數據庫傳輸到您的python程序。如果數據庫服務器位於遠程計算機上,這可能是非常慢。
- 在開始工作之前,您的程序必須爲整個數據集分配內存。這可能是幾百兆字節。
這樣做的更Python的方法是避免加載整個數據集到內存,除非你要。使用sqlite3
我會寫:
results = curs.execute("SELECT * FROM table_name")
for row in results:
print (row)
這樣只有一行在同一時間被加載。
print test_file | test_file.txt
:print
語句不支持管道操作員寫入文件。 (Python不是Linux shell!)請參閱Python File I/O. 此外,即使此語法正確,也無法將文件名放在'quote marks'
中。如果沒有引號,Python會將test_file.txt
解釋爲test_file
變量的屬性txt
。這會給你一個NameError
,因爲沒有變量叫做test_file
,或者可能是AttributeError
。
如果您希望在不必連接到網絡數據庫來測試你的代碼,然後使用the sqlite3
module。這是一個內置的Python庫,實現了一個類似於adodbapi
的數據庫。
import sqlite3
db_conn = sqlite3.connect(":memory:") # connect to temporary database
db_conn.execute("CREATE TABLE colours (Name TEXT, Red INT, Green INT, Blue INT)")
db_conn.execute("INSERT INTO colours VALUES (?,?,?,?)", ('gray', 128, 128, 128))
db_conn.execute("INSERT INTO colours VALUES (?,?,?,?)", ('blue', 0, 0, 255))
results = db_conn.execute("SELECT * FROM colours")
for row in results:
print (row)
今後請嘗試運行您的代碼,或者至少測試一下各條線是否符合您的期望。嘗試print test_file | test_file.txt
在口譯員會給你一個TypeError: unsupported operand type(s) for |: 'str' and 'str'
。
是否有問題或具體問題? – Dan 2012-03-13 21:52:16
是的,我基本上是看它是否設置正確,因爲它是所有使用「虛構」數據庫時,我編譯它只是說未能登錄,所以我不知道如果查詢和部分工作正確......這是我在py上的第一個冒險,所以在尋找一些幫助,如果這工作正確 – user1267605 2012-03-13 22:00:36
看起來你甚至沒有嘗試運行這個。 'test_file'會引發一個'NameError'。 – 2012-03-13 22:12:22