我有一个函数,当传递数据库时,表和访问详细信息将连接到SQL server中的表,以读取导出到熊猫数据帧的所有内容
def GET_DATA(source_server, source_database, source_table, source_username, source_password):
print('******* GETTING DATA ' ,source_server, '.', source_database,'.' ,source_table,'.' ,source_username , '*******')
data_collected = []
#SOURCE
connection = pypyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
'Server=' + source_server + ';'
'Database=' + source_database + ' ;'
'uid=' + source_username + ';pwd=' + source_password + '')
#OPEN THE CONNECTION
cursor = connection.cursor()
#BUILD THE COMMAND
SQLCommand = ("SELECT * FROM " + source_database +".dbo." + source_table )
#RUN THE QUERY
cursor.execute(SQLCommand)
#GET RESULTS
results = cursor.fetchone()
columnList = [tuple[0] for tuple in cursor.description]
#print(type(columnList))
while results:
data_collected.append(results)
results = cursor.fetchone()
df_column = pd.DataFrame(columnList)
df_column = df_column.transpose()
df_result = pd.DataFrame(data_collected)
frames = [df_column,df_result]
df = pd.concat(frames)
print('GET_DATA COMPLETE!')
return df
但是,大多数情况下,这个方法都很好,因为我不能确定的原因,我得到了这个错误
^{pr2}$是什么造成的?我该怎么解释?在
谢谢!在
我在我的一个项目中也遇到过类似的问题。此异常由microsoft ODBC驱动程序引发。据我说,这个问题可能是在从数据库获取结果时发生的。可能在排队
根据我之前的理解,出现这种异常的原因是从SQLServer接收到Python的数据的大小。数据库中可能有一个特定的大行导致了这个问题。如果行包含unicode字符或非ascii字符,则驱动程序超出了缓冲区长度,驱动程序无法将nvarchar转换为字节,也无法将bytes对象转换回string。当驱动程序遇到某些特殊字符时,它有时无法将bytes对象转换回字符串,因此会出现错误。驱动程序将一个bytes对象发送回python。我想这就是例外的原因。在
可能是如果你深入到某个特定的数据行,可能会对你有所帮助。在
我在这里也发现了另一个类似的问题-Click here
可能这个URL(Microsoft ODBC驱动程序的已知问题)可能也有帮助-Click here
我发现了一种更好的方法,可以将SQL中的数据提取到pandas中
使用了此链接-https://www.quora.com/How-do-I-get-data-directly-from-databases-DB2-Oracle-MS-SQL-Server-into-Pandas-DataFrames-using-Python
我在使用python3时遇到了相同的错误,如下所示:我将mssql列定义为nchar,存储了一个空字符串(在python3中是unicode),然后使用pypyodbc调用检索行游标.fetchone(). 在这条线上失败了:
将数据库中的列数据类型更改为nvarchar将其修复。在
相关问题 更多 >
编程相关推荐