【问题标题】:Connect / Store sqlite3 database in specified directory other than default -- "conn = sqlite3.connect('name_of_database')"将 sqlite3 数据库连接/存储在默认目录以外的指定目录中——“conn = sqlite3.connect('name_of_database')”
【发布时间】:2019-03-24 19:52:01
【问题描述】:

我正在使用 Sqlite3 数据库,它试图从与最初创建的目录不同的目录访问其数据。

我通过 Squish GUI 自动化 IDE 运行的 python 脚本(测试用例)位于一个目录中

C:\Squish_Automation_Functional_nVP2\suite_Production_Checklist\tst_dashboard_functional_setup

我在同一个脚本中创建了一个包含下表的数据库:

def get_var_value_pass():
    conn = sqlite3.connect('test_result.db')
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS test_result_pass (pass TEXT,result INTEGER)')    
    c.execute("INSERT INTO test_result_pass VALUES('Pass', 0)")
    conn.commit()  
    c.execute("SELECT * FROM test_result_pass WHERE pass='Pass'", )       
    pass_result = c.fetchone() 
    test.log(str(pass_result[1])) 
    test_result = pass_result[1] 
    c.close()
    conn.close()       
    return test_result

现在我想访问我之前通过“conn = sqlite3.connect('test_result.db')”在另一个位于不同目录中的另一个测试用例中创建的数据库

C:\Squish_Automation_Functional_nVP2\suite_Production_Checklist\tst_Calling_In-Call-Options_Text_Share-Text_Update-Real-Time

问题是,当我尝试对同一个数据库执行 select 语句时——在不同的脚本(测试用例)中,如下所示:

def get_var_value_pass(pass_value):
    conn = sqlite3.connect('test_result.db')
    c = conn.cursor()
    c.execute("SELECT * FROM test_result_pass WHERE pass='Pass'", )  

我一尝试 c.execute("") 语句就失败了,因为找不到表。相反,最近的“conn = sqlite3.connect('test_result.db')”刚刚创建了一个新的空数据库,而不是引用我原来创建的数据库。因此,我得出的结论是,我想尝试将我的原始数据库存储在其中两个测试用例都可以将它们用作 test_suite_resource 的地方——基本上是在另一个目录中,其他测试用例将有参考。理想情况下:

C:\Squish_Automation_Functional_nVP2\suite_Production_Checklist

是否有一个 sqlite3 函数可以让您声明要连接/存储数据库的位置?类似于 sqlite3.connect('test_result.db') 除了你定义它的路径?

顺便说一句——我已经在同一个测试脚本中尝试了第二个 sn-p 代码,它运行完美。我还尝试了 sqlite3.connect(':memory:') 的内存方法——仍然没有运气。请帮忙!谢谢。

【问题讨论】:

  • 只需指定文件的完整绝对路径(或相对于程序当前工作目录的路径)。
  • 肖恩,感谢您的回复。通过仍然使用 sqlite 函数 conn = sqlite3.connect('test_result.db') ?然后指定最初创建它的路径? conn = sqlite3.connect('C:\Squish_Automation_Functional_nVP2\suite_Production_Checklist\tst_dashboard_functional_setup\test_result.db') ?
  • 您可能必须在引用的字符串中转义反斜杠。
  • 您可以将绝对完整路径传递给connect()

标签: python sqlite automated-tests squish


【解决方案1】:

我不清楚您是否收到了答复。你有很多选择。我碰巧有一个 sqlite 数据库存储在一个目录中,我可以通过以下方式之一在该目录或另一个目录中打开它。

import sqlite3

conn = sqlite3.connect(r'C:\Television\programs.sqlite')
conn.close()
print('Hello')

conn = sqlite3.connect('C:\\Television\\programs.sqlite')
conn.close()
print('Hello')

conn = sqlite3.connect('C:/Television/programs.sqlite')
conn.close()
print('Hello')

所有三个连接尝试都成功。我看到三个 Hello 作为输出。

  1. 在字符串前面加一个“r”。原因见有关字符串的文档。
  2. 用一对反向笔画替换每个反向笔画。
  3. 将每个向后的笔划替换为向前的笔划。

【讨论】:

  • See the documents about string for the reason. 你为什么要这样做。请张贴原因。
  • @NoName:我为什么要做什么?您是要我发布提问者遇到这种情况的原因,还是我提出这个建议的原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多