我想使用 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是否允许这样做?
提前致谢。
答案 0 :(得分:0)
首先提出几个问题:
如果要创建表格(如果您拥有正确的权限)
有两种方法可以做到这一点:
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>
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()