pyodbc/sqlalchemy - 使用 pd.read_sql_query 读取表中的每一列。通过查询传递变量

Posted

技术标签:

【中文标题】pyodbc/sqlalchemy - 使用 pd.read_sql_query 读取表中的每一列。通过查询传递变量【英文标题】:pyodbc/sqlalchemy - read each column in the table using pd.read_sql_query. Pass variable through the query 【发布时间】:2016-08-25 21:27:05 【问题描述】:

我想在循环中通过 pd.read_sql_query 传递一个变量“single_column”:

for single_column in columns_list:    
    df_trial_queries = pd.read_sql_query("SELECT single_column FROM dw.db.table;",db_cnxn)

我尝试使用这样的东西:

for single_column in columns_list:    
        df_trial_queries = pd.read_sql_query("SELECT %(column_name)s FROM dw.db.table;",db_cnxn,params = 'column_name':single_column)

一点运气都没有!

【问题讨论】:

【参考方案1】:

您不能在 SQL 中“参数化”表或列名称(SQL 只允许“参数化”literals),但您可以在 Python 级别轻松完成:

In [25]: single_column = 'col1'

In [52]: table = 'dw.db.table'

In [53]: "SELECT  FROM ".format(single_column, table)
Out[53]: 'SELECT col1 FROM dw.db.table'

或者在你的情况下:

df_trial_queries = pd.read_sql_query("SELECT  FROM dw.db.table".format(single_column), db_cnxn)

注意:这是非常低效的方式!我确信有更好的方法来实现您的目标,但您必须阐明使用此循环要实现的目标...

【讨论】:

从从服务器读取到数据框的每一列,我想运行一些数据分析和描述性统计,然后保存到 csv 文件中。我这样做是因为表有 5200 万行和 80 列 @dsl1990,some data profiling and descriptive statistics可以在SQL server端做吗? 我可以这样做,但是有很多表,我将不得不编写 sql 查询。我想为此制作自动循环。我将此标记为正确答案,但如果我必须传递两个这样的变量而不是一个,你可以编辑它吗

以上是关于pyodbc/sqlalchemy - 使用 pd.read_sql_query 读取表中的每一列。通过查询传递变量的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用pd.DatetimeIndex函数将混合格式的日期数据(包含字符串datetime对象pd.Timestamp)数据转化为时间索引数据DatetimeIndex

熊猫的 pd.NA 与 np.nan

为啥我不能使用 _mm_sin_pd? [复制]

使用 pd.merge() 合并两个以上的数据帧

使用 pd.read_clipboard 复制 MultiIndex 数据帧?

Parallels Desktop 18 (Pd虚拟机)Mac永久使用版