简体   繁体   English

如何使用SQL清理删除和创建数据库

[英]How to drop and create database using sql sanitizing

cursor.execute("DROP DATABASE ?", (databasename,)) cursor.execute(“ DROP DATABASE?”,(数据库名称,))

I am using python3 with pyodbc driver. 我正在将python3与pyodbc驱动程序配合使用。 Only facing issue while create and delete database. 仅在创建和删除数据库时面临问题。 other operations like select are working fine. 其他操作(如选择)运行良好。

Getting below error: pyodbc.ProgrammingError: ('42000', u"[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '@P1'. (102) (SQLExecDirectW)") 得到以下错误:pyodbc.ProgrammingError :(“ 42000”,u“ [42000] [Microsoft] [SQL Server的ODBC驱动程序17] [SQL Server]“ @ P1”附近的语法不正确。(102)(SQLExecDirectW)”)

In order to sanitize your data you can use SQL Server QUOTENAME to returns a Unicode string with the delimiters added to make the input string a valid SQL Server delimited identifier. 为了清理数据,可以使用SQL Server QUOTENAME返回添加了定界符的Unicode字符串,以使输入字符串成为有效的SQL Server定界标识符。

You also need to set autocommit=True in your pyodbc connection to allow dropping of databases. 您还需要在pyodbc连接中设置autocommit=True才能删除数据库。

conn = pyodbc.connect("DRIVER={SQL Server};"
    "SERVER="+server+";"
    "UID="+username+";"
    "PWD="+password,
    autocommit=True)

cursor = conn.cursor()

your_database_name = "YOUR_DB_NAME"
sql_drop = (
    "DECLARE @sql AS NVARCHAR(MAX);"
    "SET @sql = 'DROP DATABASE ' + QUOTENAME(?);"
    "EXEC sp_executesql @sql"
)

cursor.execute(sql_drop, your_database_name)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM