简而言之,我想对 SQL 数据库运行查询并将返回的数据存储为 Pandas 数据结构。
我正在阅读有关 Pandas 的文档,但在识别查询的返回类型时遇到了困难。
我尝试打印查询结果,但没有得到任何有用的信息。查询码如下:
来自 sqlalchemy 导入 create_engine
engine2 = create_engine('mysql://我正在访问的数据库')
连接2 = 引擎2.connect()
数据ID=1022
resoverall = connection2.execute("
选择
总和(BLABLA) AS BLA,
总和(BLABLABLA2) AS BLABLABLA2,
总和(SOME_INT)作为 SOME_INT,
总和(SOME_INT2)作为 SOME_INT2,
100*总和(SOME_INT2)/总和(SOME_INT)作为ctr,
总和(SOME_INT2)/总和(SOME_INT) AS cpc
来自 daily_report_cooked
WHERE Campaign_id = '%s'", %dataid)
如代码所示,我想了解变量“resoverall”的格式/数据类型是什么以及如何将其与PANDAS数据结构一起使用。
这是完成任务的最短代码:
从 pandas 导入 DataFrame
df = DataFrame(resoverall.fetchall())
df.columns = resoverall.keys()
如下所述,Pandas 现在可以使用 SQLAlchemy 进行数据库读取 (read_sql) 和插入 (to_sql)。以下方法有效:
导入 pandas 作为 pd
df = m.smtshopping.cn_sql(sql, cnxn) # 让 cnxn =
connection2
旧版本:
导入pyodbc
将 pandas.io.sql 导入为 psql
cnxn = pyodbc.connect(connection_info)
光标 = cnxn.cursor()
sql =“从表中选择*”
df = psql.frame_query(sql, cnxn)
cnxn.close()
在SQLAlchemy之外,如果我需要使用pyodbc、MySQLdb或psychopg2,像下面这样的简单函数通常可以满足我的需求:
导入小数
导入pydobc
将 numpy 导入为 np
进口熊猫
cnn, cur = myConnectToDBfunction()
cmd =“从我的表中选择*”
cur.执行(cmd)
数据框 = __processCursor(cur, 数据框=True)
def __processCursor(cur, dataframe=False, 索引=None):
'''
将带有数据的数据库游标处理为
结构化 numpy 数组或 pandas 数据框。
输入:
cur - 刚刚接收数据的 pyodbc 游标数据框 - 布尔值。如果为 false,则返回一个 numpy 记录数组
如果为 true,则返回 pandas 数据框
index - 在 pandas 数据框中用作索引的列列表
'''
数据类型 = []
colinfo = cur.描述
对于 colinfo 中的 col:
如果 col[1] == unicode:
datatypes.append((col[0], 'U%d' % col[3]))
elif col[1] == str:
datatypes.append((col[0], 'S%d' % col[3]))
elif col[1] in [float,decimal.Decimal]:
datatypes.append((col[0], 'f4'))
elif col[1] == datetime.datetime:
datatypes.append((col[0], 'O4'))
elif col[1] == int:
datatypes.append((col[0], 'i4'))
数据 = []
对于 cur 中的行:
data.append(元组(行))
数组 = np.array(数据, dtype=数据类型)
如果数据框:
输出 = pandas.DataFrame.from_records(array)
如果索引不是 None:输出 = 输出.set_index(索引)
别的:
输出=数组
返回输出
导入 pandas 作为 pd
导入 mysql.connector
# 设置MySQL连接
db = mysql.connector.connect(
host="", # 你的主机,通常是 localhost
user="", # 您的用户名
密码=“”,#您的密码
database="" # 数据库名称
)
# 您必须创建一个 Cursor 对象。它将让您执行您需要的所有查询
cur = db.cursor()
# 使用所有你喜欢的 SQL
cur.execute("SELECT * FROM ")
# 将其全部放入数据框中
sql_data = pd.DataFrame(cur.fetchall())
sql_data.columns = cur.column_names
# 关闭会话
db.close()
# 显示数据
打印(sql_data.head())
第五种方法
对于 SQL Server。
导入 pandas 作为 pd
从 sqlalchemy 导入 create_engine
def getData():# 参数
服务器名称 =“我的服务器”
数据库=“my_db”
UserPwd = "用户:密码"
驱动程序=“驱动程序=SQL Server Native Client 11.0”
# 创建连接
引擎 = create_engine('mssql+pyodbc://' + UserPwd + '@' + ServerName + '/' + 数据库 + "?" + 驱动程序)
sql = "从 mytable 中选择*"
df = m.smtshopping.cn_sql(sql, 引擎)
返回df
df2 = 获取数据()
打印(df2)
参考资料
- 如何将SQL查询结果转换为PANDAS数据结构?