【问题标题】:Pyodbc -Iterating over results of query and get countsPyodbc - 遍历查询结果并获取计数
【发布时间】:2019-09-22 02:40:31
【问题描述】:

我正在尝试从另一个查询执行的表结果中获取计数,但我收到错误:

import pandas.io.sql
import pyodbc
import pandas as pd
server = '<Sample server>'
database = 'ABC'
username = 'scott'
password = 'tiger'
driver= '{ODBC Driver 17 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password,autocommit=False)
cursor = cnxn.cursor()

query = "select TABLE_NAME from information_schema.tables where table_catalog='ABC' and table_type='BASE TABLE'"

cursor.execute(query)

for row in cursor:
print(row.TABLE_NAME)
a=str(row.TABLE_NAME)
print(a)
res=cursor.execute('select count(*) from  '+a)
for i in res:
       print(i)

遇到错误

我正在尝试获取所有 table_names 及其行数

TABLE_NAME , COUNT
-------------------
EMPLOYEE,2213
DEPARTMENTS,12
LOCATION,10

你能帮我实现这个吗?

【问题讨论】:

  • 看起来您需要正确缩进代码的最后 3 行,以便它们在 for 循环内执行。
  • 您收到的错误信息是什么?请用它编辑帖子。
  • 嗨,我在查询中的缩进位置正确。虽然粘贴在上面的帖子中,上面的代码可能出错了,我只能为一个表打印计数,该数据库还有更多的表退出
  • 请回答您收到的错误信息。
  • 错误类似于 Employee_list_20190322 ProgrammingError Traceback (最近一次调用最后一次) in 23 a=(row.TABLE_NAME) 24 print(a) -- -> 25 res=cursor.execute('select count(*) as count from'+a).fetchall() 26 for i in res: 27 print(i.count) ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'from Employee_list_20190322'附近的语法不正确。(102) (SQLExecDirectW)")

标签: python sql sql-server pyodbc


【解决方案1】:

考虑一个连接到 sys 表的查询:

query = """SELECT 
             i.TABLE_NAME,
             p.[Rows] AS [COUNT]
           FROM 
             sys.tables t
           INNER JOIN 
             sys.partitions p ON t.object_id = p.OBJECT_ID
           INNER JOIN
             information_schema.tables i ON t.[NAME] = i.TABLE_NAME 
                                        AND i.table_catalog = 'ABC'
                                        AND i.table_type = 'BASE TABLE';
        """

cursor.execute(query)

【讨论】:

  • 嗨,感谢您的查询..此查询将起作用,但是我正在尝试使用上述方法找到解决方案,一个从 INFORMATION_SCHEMA.table 读取,然后需要循环其结果以获取表数对于每个表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
相关资源
最近更新 更多