Pyodbc-如果存在表格,则不要在SSMS中创建

时间:2016-04-19 02:56:38

标签: python sql-server pyodbc

我正在尝试类似的事情:

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

但是没有任何事情发生,任何人都可以帮助我吗? 我正在使用Micrsoft SQL Server Management Studio 2014 Express版本。 代码将在Python中运行。 谢谢

2 个答案:

答案 0 :(得分:6)

使用内置Cursor.tables方法进行此检查 - 以下代码示例假定连接和游标已实例化

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

请注意,这与查询INFORMATION_SCHEMA.TABLES在功能上不同,但允许使用不同数据库平台的代码可移植性(以及IMO提高可读性)。

使用SQL Server Native Client 11.0和SQL Server 2014,调用Cursor.tables只执行sp_tables系统存储过程。

答案 1 :(得分:2)

这是一个简单的例子:

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)

打印"表存在"为了我。您应该能够根据自己的需要进行修改。