Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在删除另一个数据库后,pyodbc找不到现有数据库的db id_Python_Sql Server_Pyodbc_Freetds_Unixodbc - Fatal编程技术网

Python 在删除另一个数据库后,pyodbc找不到现有数据库的db id

Python 在删除另一个数据库后,pyodbc找不到现有数据库的db id,python,sql-server,pyodbc,freetds,unixodbc,Python,Sql Server,Pyodbc,Freetds,Unixodbc,另一个用户正在使用她在python会话中创建的数据库,我们称之为user_db。一、 在SSMS中,删除一个不同的数据库,让我们称之为其他数据库。在我删除其他_db之后,她的脚本声称他们无法找到用户_db的db id。如果她删除用户_db并重新创建它,则问题仍然存在。如果她使用了一个新的名字,比如new_user_db,她的脚本会再次工作 在我看来,unixodbc/freetdbs/pyodbc/python端似乎有东西在缓存数据库id。有人能告诉我哪些工具可能导致问题,以及可能的解决方案吗

另一个用户正在使用她在python会话中创建的数据库,我们称之为user_db。一、 在SSMS中,删除一个不同的数据库,让我们称之为其他数据库。在我删除其他_db之后,她的脚本声称他们无法找到用户_db的db id。如果她删除用户_db并重新创建它,则问题仍然存在。如果她使用了一个新的名字,比如new_user_db,她的脚本会再次工作

在我看来,unixodbc/freetdbs/pyodbc/python端似乎有东西在缓存数据库id。有人能告诉我哪些工具可能导致问题,以及可能的解决方案吗

错误:

pyodbc.ProgrammingError:('42000',“[42000][FreeTDS][SQL Server]找不到数据库ID(ID\U编号)

编辑: 软件版本 pyodbc--4.0.16 centos--6.6 unixODBC--2.2.14 freeTDS——0.91

可重复通过: 用户1(在Python中):

用户2(在SSMS中):

用户1(在Python中):


编辑更正的SQL语法

我遇到的问题与数据库最近被另一个连接删除后查询信息模式有关。每次查询数据库的信息模式时运行“DBCC FREEPROCCACHE”似乎可以解决此问题。

我无法用unixODB在Ubuntu 16.04上重现您的问题C 2.3.1、FreeTDS 0.91和pyodbc 4.0.17。请用您正在使用的版本和演示问题的a来回答您的问题。在将所有出现的
test\u 1.test\u table
替换为
test\u 1..test\u table
之后,再次尝试重新编写代码。看起来您混淆了目录(也称为数据库)在中使用架构引用的引用。这将引发一个语法错误,该错误不是我正在接收的错误。否,
database\u name..object\u name
是有效的syntax.FWIW,仍然无法使用更新的代码重现问题(使用
test\u 1.dbo.test\u table
)在Xubuntu 16.04 x64上使用unixODBC 2.3.1、FreeTDS 1.0.48和pyodbc 4.0.17。
conn = pyodbc.connect(cxnstring)
cursor = conn.cursor()
cursor.execute('CREATE DATABASE test')
cursor.execute('CREATE DATABASE test_1')
cursor.execute('CREATE TABLE test_1.dbo.test_table (column_1 INT)')
cursor.execute('SELECT * FROM test_1.dbo.test_table')
DROP DATABASE test_1
conn = pyodbc.connect(cxnstring)
cursor = conn.cursor()
cursor.execute('CREATE DATABASE test_1')
cursor.execute('CREATE TABLE test_1.dbo.test_table (column_1 INT)')
cursor.execute('SELECT * FROM test_1.dbo.test_table')