2017-07-27 6 views
-1

Un autre utilisateur utilise une base de données créée lors d'une session python, appelons-la user_db. Je, dans SSMS, supprime une base de données différente, appelons-la other_db. Après avoir supprimé other_db, ses scripts déclarent qu'ils ne parviennent pas à trouver l'ID db pour user_db. Si elle supprime user_db et la recrée, le problème persiste. Si elle utilise un nouveau nom comme new_user_db, ses scripts fonctionnent à nouveau.pyodbc ne trouve pas l'ID db de la base de données existante après la suppression d'une autre base de données

Pour moi, il semble que quelque chose sur le côté unixodbc/freetdbs/pyodbc/python est la mise en cache des ID de base de données. Quelqu'un peut-il m'éclairer sur les outils qui pourraient causer le problème et éventuellement une solution pour cela?

erreur:

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

EDIT: versions du logiciel pyodbc - 4.0.16 CentOS - 6.6 unixODBC - 2.2.14 FreeTDS - 0,91

répétable via: Utilisateur 1 (en 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 

utilisateur 1 (en 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') 

Modifier corrigé la syntaxe SQL

+2

Je n'arrive pas à reproduire votre problème sous Ubuntu 16.04 avec unixODBC 2.3.1, FreeTDS 0.91 et pyodbc 4.0.17. S'il vous plaît [modifier] votre question avec les versions que vous utilisez et un [mcve] qui démontre le problème. –

+0

Essayez à nouveau votre code de repro après avoir remplacé toutes les occurrences de 'test_1.test_table' par' test_1..test_table'. Il semble que vous mélangez des références de catalogue (ou de base de données) avec des références de schéma dans vos [noms d'objets qualifiés] (https://technet.microsoft.com/fr-fr/library/ms187879 (v = sql.105) .aspx). –

+0

Cela lancerait une erreur de syntaxe qui n'est pas l'erreur que je reçois. –

Répondre

0

La question que je courais en était liée à l'interrogation de la INFORMATION_SCHEMA après une base de données avait été récemment abandonné par une autre connexion. L'exécution de 'DBCC FREEPROCCACHE' à chaque fois que l'on interroge le fichier Information_Schema d'une base de données apparaît pour résoudre le problème.