首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pyodbc查询结果读入变量

将pyodbc查询结果读入变量
EN

Stack Overflow用户
提问于 2019-10-05 23:39:46
回答 1查看 1.3K关注 0票数 0

上下文:我正在尝试通过Pyodbc从Server查询数据&使用循环逻辑将结果读入下面查询块中的变量中。

问题:可以帮助我修改下面的代码块,以便通过循环逻辑正确地填充变量吗?我怀疑是因为我在查询游标上使用了fetchall()方法,每个结果行都会转换为列表中的一个元组--这似乎会使下面的循环逻辑变得毫无用处。有人能提出另一种解决方案吗?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-06 03:10:00

当您调用sample_contact_cursor.fetchall()时,已经耗尽了游标的内容。因此,它的内容将不再适用于循环。在循环之前删除打印将修复此。而且,.fetchall()在循环中是多余的,因为在for循环中,每一行都将被逐个读取。你也可以这样写:

代码语言:javascript
复制
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

如果确实需要首先打印游标,然后运行循环,则必须在循环之前执行游标一次,如下所示:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58253148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档