【问题标题】:How to export a mysql table to a file如何将mysql表导出到文件
【发布时间】:2020-03-08 21:08:37
【问题描述】:

我有一张有 97972561 行的大桌子。我想将表格导出到一个文件(txt 或 json 或 pickle 或任何东西)中,这对于我的后续操作来说更容易。我该怎么做?我尝试查询“select * from the_table”并将结果保存到文件中,但是需要很长时间并且失败。我也尝试过“进入 outfile”,但我的“secure_file_priv”为空,无法更改。

mydb = mysql.connector.connect(
        host="localhost",
        user="username",
        passwd="xxxxxx",
        db="mydb")
        cur = mydb.cursor()

        query = "SELECT * FROM PREDICATION"
        cur.execute(query)

        all_recordings = cur.fetchall()
        mydb.close()

        # save all recordings to a pickle file
        with open('recordings.pkl', 'wb') as f:
            pickle.dump(all_recordings, f)

我目前在终端 (Mac) 和工作台 6.3 中使用 mysql 服务器 8.0.18。任何帮助将不胜感激!

【问题讨论】:

  • 了解outfile参考docs
  • 我试过了,但是我的“secure_file_priv”为空,无法解决。
  • 你应该提到你尝试过这个并得到了一个错误。这样我们就可以帮助添加额外的细节如何使它工作。
  • 尝试在配置文件中添加secure_file_priv 并指定路径。为此,您需要重新启动服务器。更多信息请参考here

标签: mysql mysql-workbench mysql-python


【解决方案1】:

这里的一个选择是使用 MySQL 的 SELECT ... INTO OUTFILE 功能(但请参阅下面的注释):

query = """SELECT * FROM PREDICATION
INTO OUTFILE 'recordings.pkl'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'"""

cur.execute(query)

这可能是将 MySQL 表转储到 CSV 的最快方法,并且应该比您建议的方法快得多,后者需要在写出之前将所有数据读入 Python。

请注意,这会在运行 MySQL 的同一台机器上生成一个名为 recordings.pkl 的 CSV 文件,不是在运行本地 Python 脚本的机器上。因此,您可能需要额外的步骤来将 CSV 移动到您想要的机器上。但是,鉴于这种方法避免了与数据库之间的任何往返,与您当前的方法相比,移动文件的成本可能会很小。

【讨论】:

  • 我试过了,但是我的“secure_file_priv”为空,无法解决。
  • MySQL 根本无法在任意位置创建文件!
  • @SalmanA 该位置根本不是任意的,它与 MySQL 的位置有关。我实际上不知道 OP 想在哪里写。
  • 我的意思是您需要通过设置secure_file_priv 变量将特定目录列入白名单。 MySQL 不能在任意位置创建文件。
  • 您还应该指定您要评论的操作系统(即 Windows 或 Linux)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多