【问题标题】:Why can't this python code create temporary table in sqlite3?为什么这个 python 代码不能在 sqlite3 中创建临时表?
【发布时间】:2018-10-16 07:34:09
【问题描述】:

我有以下 python 代码在 sqlite3 数据库中创建临时表。我已经通过在“DB Browser Sqlite”中运行代码测试了 sql 代码工作正常。但是,由于某种原因,python 代码没有成功创建临时表。代码有什么问题?

我正在使用 python v3.6

import sqlite3

db_pathname = "db.sqlite3"
sqlite_conn = sqlite3.connect(db_pathname)
sqlite_cur = sqlite_conn.cursor()

sqlite_cur.execute('''
                    CREATE TEMPORARY TABLE latest_info AS 
                    SELECT * from infos t                    
                    WHERE
                    t.date_p =
                    (SELECT MAX(date_p) from infos t1                    
                    WHERE t1.info_id = t.info_id
                    )
                   '''
                   )

sqlite_conn.commit()
sqlite_conn.close()

【问题讨论】:

  • 如何测试表是否创建成功?关闭连接后不会持久化临时表...
  • 我用的是DB Browser for SQLite这个软件。我复制并粘贴了 SQL 代码并在这个软件中运行它。我可以看到临时表创建成功。我不知道关闭连接后临时表会消失。如何让临时表持久化?
  • 你创建一个普通的表? CREATE TABLE latest_info ...?
  • 临时表仅用于会话,因此您可以例如进行连接。正如@Torxed 所说,关闭会话的那一刻,表格就会被删除。

标签: python python-3.x sqlite temp-tables


【解决方案1】:

由于 create 和 table 之间的临时关键字,关闭连接后表格消失。

尝试删除它,表格将被持久化。

类似的东西

import sqlite3

db_pathname = "db.sqlite3"
sqlite_conn = sqlite3.connect(db_pathname)
sqlite_cur = sqlite_conn.cursor()

sqlite_cur.execute('''
                CREATE TABLE latest_info AS <-- there, no more TEMPORARY
                SELECT * from infos t                    
                WHERE
                t.date_p =
                (SELECT MAX(date_p) from infos t1                    
                WHERE t1.info_id = t.info_id
                )
               '''
               )

sqlite_conn.commit()
sqlite_conn.close()

【讨论】:

  • 谢谢。如果我希望表首先保留,我不应该使用临时表。我想知道如果他们不持久,人们为什么要使用临时表。你会碰巧知道吗?
  • 我想这可以用作临时结果的持有者,例如,如果您在外壳中并一个接一个地改进结果。或者在两个复杂的请求之间重新组织数据......老实说,从来没有使用过。
  • 谢谢。我认为目的是编写使用临时表更具可读性的sql代码
  • 另一个原因是避免嵌套查询以提高性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多