我有一个程序可以用来从我的站点提取调查数据。我用 Python 编写了它,它将从 sql 数据库中获取信息,并将其下载到一个 csv 文件中。它工作得很好,但不知从何而来,它现在只是一个空白的 csv 文件,没有任何信息,也没有大小。下面是我用于拉动的程序。我现在使用 python 3.7.4。
import pymysql.cursors
import csv
import sshtunnel
from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
('ADDRESS', PORT),
ssh_username='USERNAME',
ssh_password='PASS',
remote_bind_address=('127.0.0.1', 3306)
)
server.start()
def find_number(result, number):
if str(number) in result['p4'].split(','):
return 1
if str(number) in result['p3'].split(','):
return 2
if str(number) in result['p2'].split(','):
return 3
if str(number) in result['p1'].split(','):
return 4
if str(number) in result['z'].split(','):
return 5
if str(number) in result['n1'].split(','):
return 6
if str(number) in result['n2'].split(','):
return 7
if str(number) in result['n3'].split(','):
return 8
if str(number) in result['n4'].split(','):
return 9
return 'not found: ' + str(number)
# Connect to the database
conn = pymysql.connect(host='127.0.0.1',
user='USER',
password='PASS',
db='DBNAME',
charset='utf8mb4',
port=server.local_bind_port,
cursorclass=pymysql.cursors.DictCursor)
cursor = conn.cursor()
sql = "SELECT * FROM `surveys` order by id asc"
cursor.execute(sql)
results = cursor.fetchall()
output = {}
headers = []
comments = []
for result in results:
headers.append(str(result['gender']) + '/' + str(result['birth_year']) + '/' + str(result['political_affiliation']) + '/' + str(result['religious_belief']) + '/' + str(result['ethnicity']) + '/' + str(result['location']))
for nr in range(1, 37):
if not nr in output:
output[nr] = []
nrr = find_number(result, nr)
output[nr].append(nrr)
comments.append(result['comments'])
writer = csv.writer(open("output5.csv", 'w', newline=''))
writer.writerow(headers)
for row in output:
writer.writerow(output[row])
writer.writerow(comments)
conn.close()
最佳答案
可能是 results
返回了一个错误的值,导致您的 for 循环被跳过。如果没有任何结果,您是否尝试过添加检查?
...
results = cursor.fetchall()
if not results:
raise RuntimeException('Cannot retrieve records from Database!')
此外,不确定您是否知道 defaultdict但您也可以在您的代码片段中使用它来稍微简化一下。
from collections import defaultdict
...
output = defaultdict(list)
for result in results:
...
for nr in range(1, 37):
output[nr].append(find_number(result, nr))
关于python - 使用 Python 将 SQL 信息提取到 CSV 中,结果为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325547/