如何迭代地创建许多表,每个表都以列表元素命名,也基于列表迭代地查询

时间:2013-10-29 21:24:44

标签: python python-2.7 pyodbc

我想使用 for循环迭代创建~1900个表,每个表都以list元素命名。

每个新创建的表只包含符合简单SQL查询的行,“WHERE Cable_Op = [上面提到的相同列表元素]”。

本质上,我想要一个表,列表中的每个元素,只包含Cable_Op =同一元素的行。

我有一个1900个元素的列表,每个元素都是一个文本字符串。

现在,我正在尝试

cursor = conn.cursor()

with open("C:/Python27/COALS_CARS/PROVIDERS.txt") as f:
providerlist = f.read().splitlines()

for provider in providerlist:
    cursor.execute('SELECT UID, COUNTY, STATE, Cable_Op into [provider] from COALS where Cable_Op =provider')

无济于事。在几个小时的搜索中,我既没有看到基于列表迭代地命名/创建新表,也没有看到基于列表的迭代查询。

基本上,我想要一个名为“AT& T”的表,其中只有Cable_Op =“AT& T”的值,一个名为“Comcast”的表,其中只有Cable_Op =“Comcast”的值等等(其中AT& ; T和Comcast是列表元素。)

pyodbc是否允许这样做?

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先提出几个问题:

  • 这是一次性操作吗?或者它会经常运行和 表重新加载?
  • 不要质疑目的,使用循环更好 在每个提供程序的基表上创建一个视图,然后是 数据是最新的吗?
  • 您使用的是什么RDBMS?

如果要创建表格(如果您拥有正确的权限)

有两种方法可以做到这一点:

  1. 使用:(SQL语法)
  2. 
         CREATE TABLE <table name> (<field definitions>)
         -- OR --
         TRUNCATE TABLE <table name> -- If the table already exist clear out the data
    
         -- Then, load in the data...
    
         INSERT INTO <table name> (<field list>) SELECT <field list> FROM COALS WHERE Cable_Op = <table name>
    
    1. 使用:(SQL语法)
    2. 
           SELECT <field list> INTO <table name> FROM COALS WHERE cable_op = <table name>
           -- will fail if the table already exists
      

      在for循环中   ...   检查表是否存在,如果是,则适当处理(截断并重新加载或删除)   创建并加载表

      现在使用您的代码段,您没有使用文本替换。 见下文(不检查是否存在表格)

      
          import pyodbc
      
      
          def main():
              serverName = 'DETAIL'
              databaseName = 'FS001'
              conn = pyodbc.connect('DRIVER={SQL Server};Server=%s;Database=%s;Integrated Security=true;' % (serverName, databaseName))
              cursor = conn.cursor()
      
              with open("C:\Data\PROVIDERS.txt") as f:
                  providerlist = f.read().splitlines()
      
              for provider in providerlist:
                  cursor.execute("SELECT UID, COUNTY, STATE, Cable_Op into [%s] from COALS where Cable_Op = '%s'" % (provider, provider))
      
              cursor.execute('select * from %s' % 'INFORMATION_SCHEMA.TABLES')
              rows = cursor.fetchall()
              for row in rows:
                  print row
      
          if __name__ == '__main__':
              main()