微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 3 无法检查数据库是否存在并创建它

如何解决Python 3 无法检查数据库是否存在并创建它

我是 Python 初学者。我想使用 Python 3 检查 sql 服务器上的 test2 数据库。如果它不存在,我将创建它。但是发现报错,不知道怎么办?

python 代码

import pymssql 
 
 
def conn():
    ret = pymssql.connect(host='DESKTOP-4CDQomr',user = 'sa',password = '123456') 
    if ret:
        print("connect successfully!")
    else:
        print("connect Failed!")

    return ret
        

 
 
if __name__ == '__main__':
    conn = conn()  
    if conn:
        cursor = conn.cursor()
        sql = "if not exist (select * from sys.databases where name = 'test2')"
        conn.autocommit(True)
        cursor.execute(sql)
        conn.autocommit(False) 
        conn.close()

错误信息:

---------------------------------------------------------------------------
MSsqlDatabaseException                    Traceback (most recent call last)
src\pymssql.pyx in pymssql.Cursor.execute()

src\_mssql.pyx in _mssql.MSsqlConnection.execute_query()

src\_mssql.pyx in _mssql.MSsqlConnection.execute_query()

src\_mssql.pyx in _mssql.MSsqlConnection.format_and_run_query()

src\_mssql.pyx in _mssql.check_cancel_and_raise()

src\_mssql.pyx in _mssql.maybe_raise_MSsqlDatabaseException()

MSsqlDatabaseException: (156,b"Incorrect Syntax near the keyword 'select'.DB-Lib error message 20018,severity 15:\nGeneral sql Server error: Check messages from the sql Server\nDB-Lib error message 20018,severity 15:\nGeneral sql Server error: Check messages from the sql Server\n")

During handling of the above exception,another exception occurred:

OperationalError                          Traceback (most recent call last)
F:\jupyter\connect.py in <module>
     20         sql = "if not exist (select * from sys.databases where name = 'test2')"
     21         conn.autocommit(True)
---> 22         cursor.execute(sql)
     23         conn.autocommit(False)
     24         conn.close()

src\pymssql.pyx in pymssql.Cursor.execute()

OperationalError: (156,severity 15:\nGeneral sql Server error: Check messages from the sql Server\n")

解决方法

我通过修改以下代码解决了我的问题:

sql = "if not exist (select * from sys.databases where name = 'test2')"

sql = "if not exists (select * from sys.databases where name = 'test2') begin create database test2 end"
,

我没有安装用于测试的 MS SQL Server,但是

if not exist (select * from sys.databases where name = 'test2')

对我来说似乎不是有效的 SQL。

也许你想做这样的事情:

cur = conn.cursor()
# Check if the database already exists.
cur.execute("""SELECT COUNT(*) FROM sys.databases WHERE name = 'test2'""")
res = cur.fetchone()[0]
if res == 0:
    conn.autocommit(True)
    cur.execute("""CREATE DATABASE test2""")
    conn.autocommit(False)

另一种方法可能是尝试直接创建数据库,如果异常已经存在,则捕获异常。如果在您获取计数和发送 create 语句之间有可能由其他人创建数据库,那么这是一种更好的方法。

import sys

cur = conn.cursor()
conn.autocommit(True)
try:
    cur.execute("""CREATE DATABASE test2""")
except Exception as ex:
    # Rollback is probably unnecessary
    conn.rollback()
    print('Failed to create the database because',ex,file=sys.stderr)
finally:
    conn.autocommit(False)
    conn.close()
,

您好,希望下面的代码对您有所帮助!

import mysql.connector

DB_NAME  = "test2"

client = mysql.connector.connect(host = "127.0.0.1",user = "admin",passwd = "password")
mycursor = client.cursor()
mycursor.execute("SHOW DATABASES")

if DB_NAME in mycursor:    print("Database exists :)")
else :
    print(f"Database {DB_NAME} doesn't exist,creating now....")
    mycursor.execute("CREATE DATABASE firstdatabase")
    print(f"Database {DB_NAME} created!")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?