我有一个主要的Python脚本连接到MySQL数据库并从中提取少量记录.根据返回的结果,它会启动尽可能多的线程(类实例),同时抓取多个记录.每个线程应返回数据库并通过将一个状态标志设置为不同的状态来更新另一个表("已启动进程").
为实现这一目标,我尝试:
1.)将数据库连接传递给所有线程2.)从每个线程打开一个新的数据库连接
但他们都没有工作.
我可以通过使用try/except在两种情况下都没有任何问题地运行我的更新,但MySQL表尚未更新,并且没有生成错误.我在两种情况下都使用了commit.
我的问题是如何在这种情况下处理MySQL连接?
根据前几条评论进行更新:
MAIN SCRIPT
-----------
#Connecting to DB
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur = db.cursor()
# Fetching records for which I need to initiate a class instance
cur.execute('SELECT ...')
for row in cur.fetchall() :
# Initiating new instance, appending it to a list and
# starting all of them
CLASS WHICH IS INSTANTIATED
---------------------------
# Connecting to …Run Code Online (Sandbox Code Playgroud) 我正在用 Python 开发一个报告工具,它可以从 ServiceNow 的 JSON Web 服务中获取数据。我们的 ServiceNow 实例使用普通的用户 id / pw 身份验证加上 SHA-1 认证。我的问题是我无法使用脚本访问 JSON Web 服务结果页面(https://servicenowserver.com/table.do?JSONv2&sysparm_query=active=true ^number=12345678)以从那里获取数据。我可以使用我的脚本登录主页(https://servicenowserver.com),它进行身份验证并给出 HTTP 200,但是当我调用 JSON Webservice 页面时给出 HTTP 401(未经授权)。
当我通过浏览器登录 ServiceNow 并启动会话后,我可以在新选项卡上调用 JSON 服务,它会显示结果,但这不适用于我的 Python 脚本。我尝试将urllib3和requests库与会话参数一起使用以保持会话打开,但它都不起作用。我认为我的脚本只是在调用主页后立即关闭会话。我也尝试过传递饼干,但没有成功。
长话短说:它可以在我的浏览器中运行,但如果我使用 Python 脚本则不行。
您知道我应该如何进行身份验证才能获取 JSON 结果吗?或者至少如果有人可以指导我如何获得更详细的调试?
您可以在下面找到我尝试过的解决方案之一:
import requests
s = requests.session()
s.auth = ('user', 'password')
s.verify = 'sn.cer'
r = s.get('https://servicenowserver.com', verify=True)
print (r) # This gives HTTP 200
r2 = s.get ('https://servicenowserver.com/table.do?JSONv2&sysparm_query=active=true^number=12345678', verify=True, cookies=s.cookies)
print (r2) # …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,我必须根据URL解析20个不同的HTML页面,我想从所有这些页面获取一些信息.页面具有不同的结构,所需信息位于每个站点的不同位置.
我想我可以试试Python lxml模块.由于信息可以在每个站点的不同位置找到,我很懒惰将20*X不同的注册表放在一起.表达式,我认为对这些元素使用绝对XPath是个好主意.通过这种方式,我可以简单地利用Chrome浏览器的复制XPath功能,并为我的解析器提供每个HTML元素的清晰路径,而且我不需要编写很多代码.
我找不到任何显示我如何在Python中使用绝对XPath引用HTML元素的示例.一些评论说,而不是绝对路径,最好使用相对,但不能真正解释原因.但同样,引用具有相对XPath的元素意味着一些编码再次工作.
只是为了使它更复杂这20个站点是unicode.
有没有办法在Python中引用具有绝对XPath的HTML元素并像这样获取其文本值?
/html/body/div[1]/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/div/table/tbody/tr[3]/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/font/b
Run Code Online (Sandbox Code Playgroud)
...它将返回HTML元素的文本值.
到目前为止,我得到了以下代码,它适用于相对XPath,但当我使用绝对时,它给我下面的错误.
import urllib2
from lxml import html
from bs4 import UnicodeDammit
response = urllib2.urlopen('http://oneofthesites.com')
content = response.read()
doc = UnicodeDammit(content, is_html=True)
parser = html.HTMLParser(encoding=doc.original_encoding)
root = html.document_fromstring(content, parser=parser)
data = root.find('/html/body/div[1]/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/div/table/tbody/tr[1]/td[2]/b').text_content()
print(data)
Run Code Online (Sandbox Code Playgroud)
而错误是:
SyntaxError: cannot use absolute path on element
Run Code Online (Sandbox Code Playgroud)
也许我的基本概念是错误的,所以关于如何处理这些页面的任何其他想法都是受欢迎的!
感谢您的帮助,g0m3z
是否有一个基于SQL查询的解决方案来比较Python列表和SQLite表,并获取那些表中没有的项目?
我将项目存储在我的SQLite表中,并且当我的代码运行时,我想只存储那些新的并希望扩展我的表的项目.
我知道将SQL结果作为列表与我的Python列表进行比较会很容易但我不想将查询结果加载到内存中,因为我的表包含大量数据,而且我的代码运行的代码实例更多同一时间.
我正在开展一个项目,在这个项目中,我将大量数据抓取并重新组织到结果文本文件中.以前我使用字典来存储临时数据,但随着数据量的增加,进程因内存使用速度变慢而字典变得无用.
由于处理速度在我的情况下并不那么重要,我正在尝试将字典替换为文件,但我不确定如何轻松地将文件指针移动到适当的位置并读取所需的数据.在字典中,我可以轻松地参考任何数据.我想在文件中实现相同的目标.
我正在考虑使用mmap并编写我自己的函数来将文件指针移动到我想要的位置.Python是否有内置或第三方模块用于此类操作?
欢迎任何其他理论方法.
python ×5
absolute ×1
dictionary ×1
file-io ×1
html ×1
mysql ×1
parsing ×1
servicenow ×1
sqlite ×1
xpath ×1