Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python用于在构建SQL字符串时获取标题行的数据帧循环_Python_Sql - Fatal编程技术网

Python用于在构建SQL字符串时获取标题行的数据帧循环

Python用于在构建SQL字符串时获取标题行的数据帧循环,python,sql,Python,Sql,我正在尝试使用Python中的循环将一些数据库附加到SQL server。当执行动态SQL字符串时,我得到以下错误。循环似乎是将头作为变量输入到动态SQL中,因为“数据库”是数据帧中的列头。我想从数据帧而不是标题中获取第一行数据。Python的新特性,如果不明显的话 编程错误:('42000',“[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]发生文件激活错误。物理文件名“Database”可能不正确。请诊断并更正其他错误,然后重试该操作。(

我正在尝试使用Python中的循环将一些数据库附加到SQL server。当执行动态SQL字符串时,我得到以下错误。循环似乎是将头作为变量输入到动态SQL中,因为“数据库”是数据帧中的列头。我想从数据帧而不是标题中获取第一行数据。Python的新特性,如果不明显的话

编程错误:('42000',“[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]发生文件激活错误。物理文件名“Database”可能不正确。请诊断并更正其他错误,然后重试该操作。(5105)(SQLExecDirectW)”


下面的人成功了。我为
for
循环的
索引添加了
I
,并且还应用了
iterrows()
来获取
游标中所需的行和命名列。execute()


请给我一些建议。非常感谢。
import os
import pyodbc
import pandas as pd

path = []
databases = []

path = 'Z:\Test\\'

for root, dirs, files in os.walk(r'Z:\Test'):
    for file in files:
        if file.endswith('.mdf'):
            databases.append([os.path.splitext(file)[0], path + file])

df = pd.DataFrame(databases, columns = ['Database','DatabasePath'])

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=Test;'
                      'Database=Master;'
                      'Trusted_Connection=yes;'
                      'autocommit=True;')

cursor = conn.cursor()

for x in df:
    SQL = """DECLARE @SQL as nvarchar(max) set @SQL = N'CREATE DATABASE ' + QUOTENAME(?) + N' ON (FILENAME = N''' + REPLACE(?,'''','''''') + N''') FOR ATTACH;';
EXEC sys.sp_executesql @SQL;"""
    cursor.execute(SQL, (x,x))
for i, x in df.iterrows():
    SQL = """DECLARE @SQL as nvarchar(max) set @SQL = N'CREATE DATABASE ' + QUOTENAME(?) + N' ON (FILENAME = N''' + REPLACE(?,'''','''''') + N''') FOR ATTACH;';
EXEC sys.sp_executesql @SQL;"""
    cursor.execute(SQL, (x['Database'],x['DatabasePath']))