2017-07-27 3 views
-1

Ein anderer Benutzer verwendet eine Datenbank, die er in einer Python-Sitzung erstellt hat, nennen wir ihn user_db. Ich, in SSMS, lösche eine andere Datenbank, nennen wir es other_db. Nachdem ich other_db gelöscht habe, behaupten ihre Skripts, dass sie die db-id für user_db nicht finden können. Wenn sie user_db löscht und neu erstellt, ist das Problem weiterhin vorhanden. Wenn sie einen neuen Namen wie new_user_db verwendet, funktionieren ihre Skripte wieder.pyodbc kann Datenbank-ID der vorhandenen Datenbank nicht finden, nachdem eine andere Datenbank gelöscht wurde

Mir scheint, dass etwas auf der Seite unixodbc/freetdbs/pyodbc/python Caching-Datenbank-IDs ist. Kann mir jemand erklären, welche Tools das Problem verursachen und möglicherweise eine Lösung dafür?

Fehler:

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

EDIT: Software-Versionen Pyodbc - 4.0.16 CentOS - 6.6 unixODBC - 2.2.14 freetds - 0.91

wiederholbar über: Benutzer 1 (in 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') 

uns er 2 (in SSMS):

DROP DATABASE test_1 

Benutzer 1 (in 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') 

bearbeiten SQL-Syntax

+2

Ich kann Ihr Problem auf Ubuntu 16.04 mit UnixODBC 2.3.1, FreeTDS 0.91 und Pyodbc 4.0.17 nicht reproduzieren. Bitte bearbeite deine Frage mit den von dir verwendeten Versionen und [mcve], die das Problem zeigen. –

+0

Versuchen Sie Ihren Repro-Code erneut, nachdem Sie alle Vorkommen von 'test_1.test_table' durch' test_1..test_table' ersetzt haben. Es sieht so aus, als ob Sie Katalogreferenzen (auch Datenbankreferenzen genannt) mit Schemareferenzen in Ihren [qualifizierten Objektnamen] (https://technet.microsoft.com/en-us/library/ms187879 (v = sql.105) .aspx) vermischen). –

+0

Das würde einen Syntaxfehler werfen, der nicht der Fehler ist, den ich empfange. –

Antwort

0

Das Problem behoben ich in lief zu verwandt war die information_schema nach einer Datenbankabfrage war kürzlich von einer anderen Verbindung abgeworfen worden. Die Ausführung von "DBCC FREEPROCCACHE" bei jeder Abfrage des Information_Schema einer Datenbank scheint das Problem zu beheben.

Verwandte Themen