2

在 sql-server 连接器adodbapi中,只有一个在我的环境中工作。

import adodbapi

conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
       UID={2};PWD={3};".format(server,db,user,pwd))
cursor = conn.cursor()
query_list = [row for row in cursor]

type(query_list[0]) = adodbapi.apibase.SQLrow

如何将此列表转换为熊猫 df?

谢谢

4

3 回答 3

4

我是这样做的:

import adodbapi as ado
import numpy as np
import pandas as pd

def get_df(data):
    ar = np.array(data.ado_results) # turn ado results into a numpy array
    df = pd.DataFrame(ar).transpose() # create a dataframe from the array
    df.columns = data.columnNames.keys() # set column names
    return df

with ado.connect('yourconnectionstring') as con:
    with con.cursor() as cur:
        sql_str = 'yourquery'
        cur.execute(sql_str)
        data = cur.fetchall()
        df = get_df(data)
于 2019-06-05T17:46:29.387 回答
0

这可能会有所帮助:

将熊猫导入为 pd

.......
ur_statements
.......

query_list = [row for row in cursor]
df = pd.DataFrame({'col':query_list })
print (df)
于 2019-05-10T10:11:24.173 回答
0

考虑使用 pandasread_sql直接查询数据库。目前,虽然你会收到一个错误:

键错误:'_typ'

但是,感谢@TomAubrunner在此Github 票证上的工作修复,这似乎是adodbapi.

  1. 查找位置adodpapiprint(adodbapi.__file__)
  2. 打开文件夹中的脚本:apibase.py
  3. 找到:return self._getValue(self.rows.columnNames[name.lower()])并替换为以下try/execpt块:

    try:
        return self._getValue(self.rows.columnNames[name.lower()])
    except:
        return False
    

完成后,即使使用 qmark 参数,也可以像任何 DB-API pandas 连接一样运行:

import pandas as pd
import adodbapi

conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
       UID={2};PWD={3};".format(server,db,user,pwd))

# WITHOUT PARAMS
df = pd.read_sql("SELECT * FROM myTable", conn)

# WITH PARAMS    
df = pd.read_sql("SELECT * FROM myTable WHERE [Col]= ?", conn, params=['myValue'])

conn.close()
于 2019-09-17T19:40:17.647 回答