【问题标题】:SQLITE with python : Adding the database name in SELECT statementSQLITE with python:在 SELECT 语句中添加数据库名称
【发布时间】:2022-06-10 17:22:54
【问题描述】:

我在 python 中使用 sqlite3,在连接到数据库并创建表后,当我尝试对包含数据库名称的表执行 SELECT 语句时,sqlite3 显示错误:

con = sqlite3.connect("my_databse")

cur = con.cursor() 

cur.execute('''CREATE TABLE my_table ... ''') 

cur.execute("SELECT * FROM my_database.my_table") # this works fine without the name of the database before the table name

但我从 sqlite3 收到此错误: 没有这样的表:my_database.my_table

有没有办法使用其中的数据库名称执行 SELECT 语句?

【问题讨论】:

  • 这是错字吗?你的第一行使用"my_databse"。另外,既然您已经连接到该数据库,为什么还要在 select 语句中使用数据库名称?
  • 为什么需要这样做?该符号适用于允许您通过单个连接访问多个数据库的 DBMS。但是sqlite 文件只包含一个数据库。将它作为表名的前缀是没有意义的。如果您这样做是因为您计划在某个时候将代码迁移到多用户数据库,那么在更像预期目标的数据库上进行开发可能会更好。命名表将是您从 sqlite 迁移的最少问题。
  • 对不起,但这不是问题,代码工作正常@MZ
  • @BoarGules 这应该是一个答案,而不是评论。
  • @BoarGules 我正在使用第三方代码(与我的 python 脚本交互)生成我无法更改的 SQL 语句(以数据库名称为前缀),我只能使用 SQLITE3 数据库我创造

标签: python database sqlite


【解决方案1】:

简短的回答是不,你不能用 SQLite 做到这一点。这是因为您已经使用 sqlite3.connect() 指定了数据库名称,而 SQLite3 不允许在同一个文件中包含多个数据库。

【讨论】:

    【解决方案2】:

    确保数据库与 python 脚本位于同一目录中。为了验证这一点,您可以使用os 库和os.listdir() 方法。连接数据库并创建游标后,就可以用表名查询了。

    cur.execute('SELECT * FROM my_table')
    

    【讨论】:

    • 数据库在python脚本的同一目录下,所以我认为这不是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多