0

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

每个新创建的表将仅包含满足简单 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 允许这样做吗?

提前致谢。

4

1 回答 1

0

先问几个问题:

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

如果你想创建表(如果你有正确的权限)

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

  1. 使用:(SQL 语法)

     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 语法)

     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()
于 2013-10-29T23:09:15.283 回答