【问题标题】:How to save results from mySQL database into a file or variable in python?如何将 mySQL 数据库中的结果保存到 python 中的文件或变量中?
【发布时间】:2021-02-10 13:21:32
【问题描述】:

我有一个小应用程序,它从客户端获取用户坐标并在 mySQL 数据库中搜索最近的位置。我需要从我的数据库中获取结果并将它们保存到一个文件中或将这些结果分配给一个变量。 我需要在下面的代码中添加什么来实现它?

import mysql.connector


mycursor = mydb.cursor()

mycursor.execute("SELECT dbx, dby, SQRT(
    POW(69.1 * (dbx - userx), 2) +
    POW(69.1 * (usery - dby) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 125 ORDER BY distance;")

mydb.commit()

dbxdby 是来自存储在数据库中的点的经度和纬度参数 userxusery 是从客户端获取的经度和纬度参数。

【问题讨论】:

  • 如何将结果从 mySQL 数据库保存到文件中 执行SELECT .. INTO OUTFILE.

标签: python mysql sql inheritance


【解决方案1】:

可以使用查询将查询结果放入文件/tmp/some_filename.txt

SELECT dbx, dby, SQRT(
    POW(69.1 * (dbx - userx), 2) +
    POW(69.1 * (usery - dby) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 125 ORDER BY distance
INTO OUTFILE '/tmp/some_filename.txt'

如果要使用分隔符和引号字符,请添加:

FIELDS TERMINATED BY ','
ENCLOSED BY '"'

如果要为输出文件添加行终止符:

LINES TERMINATED BY '\n'

【讨论】:

    【解决方案2】:

    您可以获取查询结果并将其保存到变量中,使用以下内容:

    res=mycursor.execute("SELECT dbx, dby, SQRT(
        POW(69.1 * (dbx - userx), 2) +
        POW(69.1 * (usery - dby) * COS(latitude / 57.3), 2)) AS distance
    FROM TableName HAVING distance < 125 ORDER BY distance;").fetcall()
    

    res 将是一个元组列表,例如[(0.53, 75.32, 2000), (0.55, 62.75, 3000)]

    您现在可以使用以下内容将其保存为 txt 文件:

    with open('res.txt', 'w') as f:
        f.writelines([(str(i)+'\n') for i in res])
    

    您也可以将其保存为 csv、json 或您想要的任何其他格式,但在您的情况下可以使用 txt 格式

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2022-12-08
      • 2018-12-24
      相关资源
      最近更新 更多