【问题标题】:creating a table in sqlite3 python在 sqlite3 python 中创建一个表
【发布时间】:2014-05-15 07:10:00
【问题描述】:

对于提出这样一个基本问题,我提前道歉,但我是 SQlite3 的新手,开始时遇到了麻烦。我正在尝试用一张表构建一个数据库。我使用以下代码建表。

import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('''CREATE TABLE mytable
         (start, end, score)''')

但每当我尝试更新或访问该表时,它似乎不存在,或者它可能存在于不同的数据库中。我还尝试创建一个名为 example.mytable 的表,但出现错误: sqlite3.OperationalError:未知数据库示例

我错过了什么? 谢谢

【问题讨论】:

  • 这个代码是退出程序的一部分吗?您何时尝试访问该表?
  • 为我工作。显示尝试更新或访问表的代码。
  • 我用这个方法查了一下,表确实存在。我在执行 conn.commit() 后关闭了连接。然后我重新打开它,数据在那里并关闭它。我第三次尝试访问它时收到表不存在的错误-我每次都必须以提交和关闭结束吗?
  • 你的解决方案是什么?

标签: python sqlite


【解决方案1】:
import sqlite3;
import pandas as pd;

con=None

def getConnection():
    databaseFile="./test.db"
    global con
    if con == None:
        con=sqlite3.connect(databaseFile)
    return con

def createTable(con):
    try:
        c = con.cursor()
        c.execute("""CREATE TABLE IF NOT EXISTS Movie
                 (start, end, score)""")
    except Exception as e:
        pass

def insert(con):
    c = con.cursor()
c.execute("""INSERT INTO Movie (start, end, score)
          values(1, 99, 123)""")

def queryExec():
    con=getConnection()
    createTable(con)
    insert(con)
    # r = con.execute("""SELECT * FROM Movie""")
    result=pd.read_sql_query("select * from Movie;",con)
    return result


r = queryExec()
print(r)

【讨论】:

    【解决方案2】:

    我认为插入后需要提交(架构更改,例如新表应该自动提交)。我建议您也将完整路径添加到您的数据库中,以确保您下次访问相同的位置。

    这是您代码的扩展:

    import sqlite3
    
    def create():
        try:
            c.execute("""CREATE TABLE mytable
                     (start, end, score)""")
        except:
            pass
    
    def insert():
        c.execute("""INSERT INTO mytable (start, end, score)
                  values(1, 99, 123)""")
    
    def select(verbose=True):
        sql = "SELECT * FROM mytable"
        recs = c.execute(sql)
        if verbose:
            for row in recs:
                print row
    
    db_path = r'C:\Users\Prosserc\Documents\Geocoding\test.db'
    conn = sqlite3.connect(db_path)
    c = conn.cursor()
    create()
    insert()
    conn.commit() #commit needed
    select()
    c.close()
    

    输出:

    (1, 99, 123)
    

    关闭程序后,如果我登录到 SQLite 数据库,数据仍然存在。

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多