另一个数据库已被删除后,pyodbc无法找到现有数据库的db标识

另一个数据库已被删除后,pyodbc无法找到现有数据库的db标识

问题描述:

另一个用户正在使用她在python会话中创建的数据库,我们称之为user_db。我在SSMS中删除了一个不同的数据库,我们把它称为other_db。删除other_db后,她的脚本声称他们无法找到user_db的db id。如果她丢弃user_db并重新创建它,问题仍然存在。如果她使用new_user_db这样的新名字,她的脚本会再次运行。另一个数据库已被删除后,pyodbc无法找到现有数据库的db标识

对我来说,似乎unixodbc/freetdbs/pyodbc/python端的东西是缓存数据库ID。任何人都可以启发我哪些工具可能会导致问题并可能为此提供解决方案?

错误:

pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]Could not find database ID (id_number)

编辑: 软件版本 pyodbc - 4.0.16 的CentOS - 6.6 的unixODBC - 2.2.14 freetds的 - 0.91

重复经: 用户1(在Python中):

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') 

我们ER 2(在SSMS):

DROP DATABASE test_1 

用户1(在Python):

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') 

编辑更正SQL语法

+2

我无法在Ubuntu 16.04上使用unixODBC 2.3.1,FreeTDS 0.91和pyodbc 4.0.17重现您的问题。请使用您正在使用的版本以及演示问题的[mcve]来编辑您的问题。 –

+0

用'test_1..test_table'替换所有出现的'test_1.test_table'后再次尝试您的repro代码。它看起来像是你的[限定对象名称](https://technet.microsoft.com/en-us/library/ms187879(v=sql.105).aspx混合了目录(又名数据库)引用与模式引用)。 –

+0

这会引发语法错误,这不是我收到的错误。 –

我跑进了相关的数据库后查询INFORMATION_SCHEMA问题最近已被另一个连接中断。每次查询数据库的Information_Schema时都会运行'DBCC FREEPROCCACHE'似乎可以解决问题。