【问题标题】:How to create a function with SQL in Python and create columns?如何在 Python 中使用 SQL 创建函数并创建列?
【发布时间】:2022-01-03 18:40:24
【问题描述】:

我正在使用 Python 中的 pyodbc 访问 Microsoft SQL Server 数据库,并且我有许多关于州和年份的表。我正在尝试使用它们创建一个 pandas.DataFrame,但我不知道如何创建一个函数并仍然为这些州和年份中的每一个创建指定 YEAR 和 STATE 的列(我以 NY2000 为例)。我应该如何构建该功能或“如果循环”?抱歉,不清楚,这是我在这里的第一篇文章:/

tables = tuple([NY2000DX,NY2001DX,NY2002DX,AL2000DX,AL2001DX,AL2002DX,MA2000DX,MA2001DX,MA2002DX])
jobs = tuple([55,120])

query = """ SELECT
             ID,
             Job_ID,
             FROM {}
             WHERE Job_ID IN {}
            """.format(tables,jobs)

NY2000 = pd.read_sql(query,  server)

NY2000["State"] = NY
NY2000["Year"] = 2000

我想要的结果将是一个 DF,其中包含来自所有表的信息,其中列指定了 State 和 Year。喜欢:

Year State ID Job_ID
2000 NY 13 55
2001 NY 20 55
2002 NY 25 55
2000 AL 15 120
2001 AL 60 120
2002 AL 45 120
------------ ------- -------- ----------

感谢您的支持:)

【问题讨论】:

  • 除此之外,您不应该在关系数据库中存储许多前缀和后缀表。所有这些表都应该标准化为一个带有 stateyear 指标的 single 表。如果可能,请考虑数据库设计。
  • SQL 数据库 是指 SQL Server 数据库吗?如果是这样,请标记您的 DBMS。仅供参考:包括 Microsoft 在内的任何公司都不拥有 SQL 名称。

标签: python sql sql-server pandas pyodbc


【解决方案1】:

我同意 cmets 关于规范化数据库的观点,您也没有发布表结构。我假设知道年份和状态的唯一方法是通过表名,如果是这样,那么您可以按照以下方式做一些事情:

df=pd.DataFrame({"Year":[],"State":[],"ID":[],"JOB_ID":[]})
tables = ["NY2000DX2","NY2001DX","NY2002DX","AL2000DX","AL2001DX","AL2002DX","MA2000DX","MA2001DX","MA2002DX"]
jobs = tuple([55,120])

def readtables(tablename, jobsincluded):
    query = """ SELECT
             {} YEAR,
             {} STATE,
             ID,
             Job_ID,
             FROM {}
             WHERE Job_ID IN {}
            """.format(tablename[2:6],tablename[:2],tablename,jobsincluded)
    return query

for table in tables:
    print(readtables(table,jobs))
    #dftable= pd.read_sql('readtables(table,jobs)', conn)
    #df=pd.concat[df,dftable]

请注意,我将实际的表格读取和连接注释掉到最终数据帧中,因为我实际上没有要测试的连接。我只是打印了结果查询作为概念证明。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2021-02-16
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多