2017-07-27 44 views
-1

另一個用戶正在使用她在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

這會引發語法錯誤,這不是我收到的錯誤。 –

回答

0

我跑進了相關的數據庫後查詢INFORMATION_SCHEMA問題最近已被另一個連接中斷。每次查詢數據庫的Information_Schema時都會運行'DBCC FREEPROCCACHE'似乎可以解決問題。