在python中调用mysql存储过程并将结果写入csv文件
Posted
技术标签:
【中文标题】在python中调用mysql存储过程并将结果写入csv文件【英文标题】:Call mysql stored procedure in python and write the result into a csv file 【发布时间】:2018-04-07 07:41:26 【问题描述】:我是 python 新手,我试图在 python 中定义一个函数,该函数使用 mysql.connector 在 python 中调用存储过程并将结果写入 csv 文件。 我已经定义了一个函数来调用存储过程并打印结果。但无法弄清楚如何将我的结果写入 csv 文件而不是打印。尝试了一些在网上找到的方法,但没有带我去任何地方
到目前为止,我的代码是:
def call_accessionsByaffliction():
try:
conn = mysql.connector.connect( host="localhost", user="root",
password="1232580", database="db")
cur = conn.cursor()
cur.callproc('AccessionsBycauseOfAffliction_year')
for result in cur.stored_results():
print(result.fetchall())
except Error as e:
print(e)
finally:
cur.close()
conn.close()
和
if __name__ == '__main__':
call_accessionsByaffliction()
有什么帮助吗?非常感谢
【问题讨论】:
如果您要写入 CSV,请使用标准的csv
模块。
【参考方案1】:
import csv
def cs_writer(string_chunk):
# define desired output file name
file_name = "output.csv"
try:
#open file in write mode and hold object
out_file = open(file_name, "wt")
# create csv write object
writer = csv.writer(out_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
for line in string_chunk:
writer.writerow(line)
except Exception as e:
print(e)
finally:
# close file
out_file.close()
def call_accessionsByaffliction():
try:
conn = mysql.connector.connect( host="localhost", user="root", password="1232580", database="db")
cur = conn.cursor()
# execute stored procedure
cur.callproc('AccessionsBycauseOfAffliction_year')
# fetch all results or use fetchone()
for res in cur.stored_results():
result = res.fetchall()
print(result)
return result
except Error as e:
print(e)
finally:
cur.close()
conn.close()
if __name__ == '__main__':
cs_writer(call_accessionsByaffliction())
我希望这能回答你的问题。
【讨论】:
这是我正在寻找的代码。但我仍然收到一条错误消息:没有要从中获取的结果集。回溯(最近一次调用最后):文件“如果您正在处理数据,我强烈建议您研究 Pandas。此外,对于这样的论坛,最好省略__main__
支票。这是一个未经测试的代码,它可以完成您在 Pandas 中尝试做的事情。
import pandas
connection_string = "'mysql://root:1232580@localhost/db'"
df = pandas.read_sql_query('EXEC AccessionsBycauseOfAffliction_year', connection_string)
df.to_csv('AccessionsBycauseOfAffliction_year.csv')
【讨论】:
抱歉我没有安装 pandas 安装非常简单:pip install pandas
【参考方案3】:
如果你能找到SP,调用你可以使用下面的代码 请提供更多您想要代码仅用于将结果存储在 csv 中的格式?
from mysql.connector import MySQLConnection, Error
from python_mysql_dbconfig import read_db_config
def call_find_by_isbn():
try:
db_config = read_db_config()
conn = MySQLConnection(**db_config)
cursor = conn.cursor()
args = ['1236400967773', 0]
result_args = cursor.callproc('AccessionsBycauseOfAffliction_year', args)
print(result_args[1])
except Error as e:
print(e)
finally:
cursor.close()
conn.close()
if __name__ == '__main__':
call_find_by_isbn()
【讨论】:
是的。我试图将结果保存在 csv 文件中。但还是想不出办法 好的,所以您可以找到存储过程,唯一的问题是将结果存储在 CSV 文件中会给您代码,或者您可以尝试@chthonicdaemon 给出的解决方案 是的,我的存储过程是“AccessionsBycauseOfAffliction_year()”,我正在寻找将我的结果集存储在 csv 文件中的代码。我更喜欢使用相同的方法而不是使用熊猫。有什么帮助吗?以上是关于在python中调用mysql存储过程并将结果写入csv文件的主要内容,如果未能解决你的问题,请参考以下文章