我有一个Python脚本的学校项目,它运行一个SQL查询并将结果吐出到一个文件......到目前为止,我有这个想要一些反馈,如果这看起来正确或我离开了(我' m使用adodbapi)。非常感谢!
import adodbapi
# Connect to the SQL DB
conn = adodbapi.connect("Provider=SQLDB;SERVER= x.x.x.x ;User Id=user;Password=pass;DATABASE=db database;")
curs = conn.cursor()
# Execute SQL query test_file.sql"
query = 'test_file'
curs.execute("SELECT test_file")
rows = curs.fetchall()
for row in rows:
print test_file | test_file.txt
conn.close()
答案 0 :(得分:0)
# 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: ...
不是迭代查询所有结果的好方法。
更多的Pythonic方法是避免将整个数据集加载到内存中,除非必须这样做。使用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
解释为名为txt
的变量的属性test_file
。这将为您提供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'
。