【问题标题】:How to Iteratively Create Many Tables, Each Named After a List Element, also query iteratively based on list如何迭代创建多个表,每个表都以一个列表元素命名,也可以根据列表迭代查询
【发布时间】:2013-10-29 21:24:43
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: python python-2.7 pyodbc


    【解决方案1】:

    前几个问题:

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

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

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

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

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

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

    
        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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2021-05-27
      • 2014-03-12
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多