将 pyodbc 查询结果读入变量
Read pyodbc query results into variables
上下文: 我正在尝试通过 Pyodbc 从 SQL 服务器查询数据,并使用循环逻辑将结果读入下面查询块中的变量。
问题:有人可以帮我修改下面的代码块,以便它通过循环逻辑正确填充变量吗?我怀疑是因为我在查询游标上使用 fetchall() 方法,每个结果行都转换为列表中的元组——这似乎使它下面的循环逻辑变得无用.有人可以建议替代解决方案吗?
from constantcontact import ConstantContact
from constantcontact import Contact
import requests
import json
import pyodbc
username = 'REDACTED'
password = 'REDACTED'
sample_contact_connection = pyodbc.connect("Driver={ODBC Driver 13 for SQL Server};""Server=PC;""Database=leadgen_sandbox;""Username="+username+";""Password="+password+";""Trusted_Connection=yes;")
sample_contact_cursor = sample_contact_connection.cursor()
sample_contact_query = "SELECT first_name,last_name,title,company_name,email_address FROM leadgen_sandbox.dbo.sample_contacts"
sample_contact_connection.autocommit = True
sample_contact_cursor.execute(sample_contact_query)
print(sample_contact_cursor.fetchall())
constantcontact = ConstantContact('REDACTED','REDACTED')
list_id = '1816761971'
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor.fetchall():
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
new_contact.set_job_title(''+title+'')
new_contact.set_company_name(''+company_name+'')
new_contact.add_list_id(''+list_id+'')
new_contact.set_email_address(''+email_address+'')
response = constantcontact.post_contacts(new_contact)
response_text = json.dumps(response, indent = 4, sort_keys = True)
print(response_text)
sample_contact_connection.close()
当您调用 sample_contact_cursor.fetchall() 时,您已经用完了光标的内容。因此,它的内容将不再可用于循环。 删除循环之前的打印将解决此问题。此外, .fetchall() 在循环中是多余的,因为无论如何都会在 for 循环中逐行读取每一行。你也可以这样写:
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor:
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
#Write your remaining code
如果您确实需要先打印光标,然后 运行 循环,则必须在循环之前再次执行一次光标,如下所示:
sample_contact_cursor.execute(sample_contact_query)
print(sample_contact_cursor.fetchall())
constantcontact = ConstantContact('REDACTED','REDACTED')
list_id = '1816761971'
sample_contact_cursor.execute(sample_contact_query)
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor:
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
#Write your remaining code
上下文: 我正在尝试通过 Pyodbc 从 SQL 服务器查询数据,并使用循环逻辑将结果读入下面查询块中的变量。
问题:有人可以帮我修改下面的代码块,以便它通过循环逻辑正确填充变量吗?我怀疑是因为我在查询游标上使用 fetchall() 方法,每个结果行都转换为列表中的元组——这似乎使它下面的循环逻辑变得无用.有人可以建议替代解决方案吗?
from constantcontact import ConstantContact
from constantcontact import Contact
import requests
import json
import pyodbc
username = 'REDACTED'
password = 'REDACTED'
sample_contact_connection = pyodbc.connect("Driver={ODBC Driver 13 for SQL Server};""Server=PC;""Database=leadgen_sandbox;""Username="+username+";""Password="+password+";""Trusted_Connection=yes;")
sample_contact_cursor = sample_contact_connection.cursor()
sample_contact_query = "SELECT first_name,last_name,title,company_name,email_address FROM leadgen_sandbox.dbo.sample_contacts"
sample_contact_connection.autocommit = True
sample_contact_cursor.execute(sample_contact_query)
print(sample_contact_cursor.fetchall())
constantcontact = ConstantContact('REDACTED','REDACTED')
list_id = '1816761971'
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor.fetchall():
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
new_contact.set_job_title(''+title+'')
new_contact.set_company_name(''+company_name+'')
new_contact.add_list_id(''+list_id+'')
new_contact.set_email_address(''+email_address+'')
response = constantcontact.post_contacts(new_contact)
response_text = json.dumps(response, indent = 4, sort_keys = True)
print(response_text)
sample_contact_connection.close()
当您调用 sample_contact_cursor.fetchall() 时,您已经用完了光标的内容。因此,它的内容将不再可用于循环。 删除循环之前的打印将解决此问题。此外, .fetchall() 在循环中是多余的,因为无论如何都会在 for 循环中逐行读取每一行。你也可以这样写:
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor:
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
#Write your remaining code
如果您确实需要先打印光标,然后 运行 循环,则必须在循环之前再次执行一次光标,如下所示:
sample_contact_cursor.execute(sample_contact_query)
print(sample_contact_cursor.fetchall())
constantcontact = ConstantContact('REDACTED','REDACTED')
list_id = '1816761971'
sample_contact_cursor.execute(sample_contact_query)
for [first_name, last_name, title, company_name, email_address] in sample_contact_cursor:
new_contact = Contact()
new_contact.set_first_name(''+first_name+'')
new_contact.set_last_name(''+last_name+'')
#Write your remaining code