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