当前位置: 首页 > 面试题库 >

无法使用存储过程pyodbc SQL SERVER创建数据库

柴意智
2023-03-14
问题内容

我正在尝试调用从pyodbc创建数据库的存储过程

以下是代码的最小示例

import pyodbc
conn = pyodbc.connect("Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=yes;")
cursor=conn.cursor()
cursor.execute("""\
    DECLARE @RC int
    DECLARE @ClientName varchar(255)
    SET @ClientName = 'Test'
    EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName
""")
conn.commit()

理想情况下,该代码应在SQL Server实例中创建一个名为“ Test ”的数据库。这不会产生任何错误。但是没有创建数据库。

跑步

DECLARE @RC int
DECLARE @ClientName varchar(255)
SET @ClientName = 'Test'
EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName

问题答案:

Python DB API2.0指定默认情况下,应在禁用自动提交的情况下打开连接。但是,许多数据库要求DDL语句
不在 事务内执行。尝试在禁用自动提交的情况下执行DDL语句可能会导致错误或意外结果。

因此,更安全的是确保在启用了自动提交的连接上执行DDL语句。这可以通过autocommit=True在打开连接时进行设置来实现…

cnxn = pyodbc.connect(connection_string, autocommit=True)

…或通过启用autocommit现有连接…

cnxn = pyodbc.connect(connection_string)
# ...
cnxn.autocommit = True


 类似资料:
  • 我最近从使用预填充的DB切换到允许Hibernate创建我的表。当试图在我的data.sql中创建存储过程时,我得到以下错误: 我已经尝试添加

  • MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。 编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。 下面主要介绍如何创建存储过程。 可以使用

  • 我正在尝试使用文本文件的内容在MySQL数据库中创建存储过程: 我使用本机查询执行SQL: 但是它在DROP PROCEDURE上得到一个错误我注释了DROP PROCEDURE,然后它在DELIMITER上得到一个错误基本上,它在第一个分号之后的任何一行上都得到一个错误。 似乎JPA hibernate正在解析我的查询并告诉我它有问题,而不是将纯文本传递到MySQL。 sql在MySQL中运行,

  • 问题内容: 我正在尝试使用如下分隔符在MySQL中创建存储过程: 它给我一个错误: 用分隔符创建存储过程并将其删除(如果存在的话)的正确语法是什么? 问题答案: 这是带有分隔符的示例 MYSQL存储过程 以及如何调用。 并通过mysql_connection规范进行调用, 它将返回该过程的结果。

  • 问题内容: 我正在从PHP中读取一个TEXT文件,并试图从中执行命令,例如创建一个DB及其具有的所有表和过程。我的代码创建表,但不创建文件中给定的存储过程。 PDO没有创建SP,那么将如何完成此任务?我尝试一起执行所有代码部分并逐行执行,但没有任何效果。 我正在尝试制作数据库安装程序脚本。 问题答案: 好吧,PMA帮助我回答了我自己的问题。 为了克服这个问题,您需要删除过程的定界符部分,以便查询变

  • 我目前正在尝试使用使用Spring创建的内存中HSQLDB实例创建一个测试环境,这要归功于其嵌入式数据库支持: > 为我的单元测试创建“数据源”: “stored_procedure.sql”的内容: 我能够初始化我的架构并从“默认脚本”插入我的测试数据,没有任何问题。 但是,在创建过程时,我看到了如下错误,即使在上面SQL的不同版本之后,有/没有分隔符,并且分隔符在不同位置: 我正在使用提供HS