我正在尝试调用一个从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。
答案 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