Pyodbc - Если таблица существует, не создавайте в SSMS

Я пробую что-то вроде:

import pyodbc cnxn = pyodbc.connect(driver ='{SQL Server}' ,server ='host-MOBL\instance',database ='dbname', trusted_connection = 'yes' ) cursor = cnxn.cursor() cursor.execute("""SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TableName'""") def checkTableExists(cnxn, TableName): cursor = cnxn.cursor() cursor.execute(""" SELECT COUNT(*) FROM information_schema.tables WHERE TABLE_NAME = '{0}' """.format(TableName.replace('\'', '\'\''))) if cursor.fetchone()[0] == 1: cursor.close() return True cursor.close() return False if checkTableExists == True: print ("already") elif checkTableExists == False: print ("No") 

Но ничего не происходит, может 9X_python-interpreter ли кто-нибудь мне в этом помочь? Я использую 9X_pyodbc версию Micrsoft SQL Server Management Studio 9X_sql-srever 2014 Express. Код будет запускаться на Python. Спасибо

7
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Pyodbc - Если таблица существует, не создавайте в SSMS

Используйте для этой проверки встроенный 9X_python метод Cursor.tables - в следующем примере кода предполагается, что 9X_pythonista соединение и курсор созданы.

if cursor.tables(table='TableName', tableType='TABLE').fetchone(): print("exists") else: print("doesn't exist") 

Обратите внимание, что 9X_sql-srever это функционально не отличается от запроса 9X_py INFORMATION_SCHEMA.TABLES, но обеспечивает переносимость кода с различными 9X_python-interpreter платформами баз данных (а IMO улучшает читаемость).

При 9X_sql-server использовании SQL Server Native Client 11.0 9X_sql-server и SQL Server 2014 вызов Cursor.tables просто выполняет 9X_pythonic системную хранимую процедуру sp_tables.

12
0

Ответ #2

Ответ на вопрос: Pyodbc - Если таблица существует, не создавайте в SSMS

Вот простой пример:

import pyodbc conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=yourserver.com;PORT=1433;DATABASE=your_db;UID=your_username;PWD=your_password;TDS_Version=7.2;') cursor = conn.cursor() cursor.execute(""" IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'your_table_name') BEGIN SELECT 'Your table exists.' AS result END """) rows = cursor.fetchall() for row in rows: print(row.result) 

Это напечатало для меня 9X_ms-sql-server "Таблица существует". Вы сможете изменить 9X_sql-srever его в соответствии со своими потребностями.

4
0