【问题标题】:Error: sqlite3.OperationalError: no such table: main.m错误:sqlite3.OperationalError:没有这样的表:main.m
【发布时间】:2017-05-02 16:58:01
【问题描述】:

我在 python 中有一个非常简单的代码,基本上我尝试为我的数据库中的每个表创建索引(已经存在)。数据库和我的脚本文件位于同一个文件夹中。在获取表名称列表并尝试为第一个表创建索引后,我收到以下错误消息:

c.execute("CREATE INDEX IF NOT EXISTS "+tableName[m]+"Date ON "+tableName[m]+" (date)"); sqlite3.OperationalError:没有这样的表: main.m

数据库中没有任何同名的表(main.m)!

我的代码:

import sqlite3
DBname = 'myDatabase.sqlite';
# connect to the database
conn = sqlite3.connect(DBname);
c    = conn.cursor();
c.execute("SELECT name FROM sqlite_master WHERE type='table'");
tables = c.fetchall();
print("\nCreating the indices for each table in the database ...");
for m in range (0,len(tables)):
    tableName = tables[m][0];
    print(tableName)
    c.execute("CREATE INDEX IF NOT EXISTS "+tableName[m]+"Date ON "+tableName[m]+" (date)");
    c.execute("CREATE INDEX IF NOT EXISTS "+tableName[m]+"Year ON "+tableName[m]+" (year)");
conn.close()

感谢您的帮助!

【问题讨论】:

  • MySQL与SQLite无关,这些是不同的产品。
  • 应该tableName[m] 只是tableName
  • 您打印出 tableName 变量。它是否显示正确的表名?
  • @Shadow:感谢您编辑我的帖子。是的,它显示了第一个表的正确名称!
  • 这种情况下为什么在创建sql语句时使用tableName[m]形式呢?只需使用tableName

标签: python sql python-3.x sqlite


【解决方案1】:

如果tableName 变量根据您的评论显示正确的表名,则在创建 sql 语句时使用tableName 而不是tableName[m]

c.execute("CREATE INDEX IF NOT EXISTS "+tableName+"Date ON "+tableName+" (date)");
c.execute("CREATE INDEX IF NOT EXISTS "+tableName+"Year ON "+tableName+" (year)");  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2015-07-30
    • 2016-02-20
    • 2018-08-18
    相关资源
    最近更新 更多