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

时间:2019-04-24 11:37:38

标签: python sql sql-server database pyodbc

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

以下是该代码的最小示例

    <?php

    $array1 = 'your array'

    $array2 = array(); // take a one empty array

    foreach($array1 as $key => $value){
        if(!empty($value)){
            foreach($value as $key1 => $value1){
                if(!empty($value1)){
                    $array2[$key][$key1] = array_keys_multi($value1);
                }else{
                    $array2[$key][$key1] = '';
                }
            }
        }else{
            $array2[$key] = '';
        }
    }

   // function for fetch keys in a single array.
    function array_keys_multi(array $array)
    {
        $keys = array();

        foreach ($array as $key => $value) {
            $keys[] = $key;

            if (is_array($value)) {
                $keys = array_merge($keys, array_keys_multi($value));
            }
        }

        return $keys;
    }

    echo "<pre>";
    print_r($array2);

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

运行

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

似乎从SSMS创建了数据库。已经提到了几个问题,包括this one

1 个答案:

答案 0 :(得分:2)

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

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

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

...或通过在现有连接上启用autocommit ...

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