我正在尝试创建一个可重用的mysql语句,用于从字典更新,其中键是数据库字段,进入该字段的数据是字典中与之关联的值.创建插入mysql的函数时很容易,因为它只涉及两个列表.现在,我需要拆分列表.
这是我必须要做的事情.
fields = self.dictionary.keys()
vals = self.dictionary.values()
stmt = "UPDATE TABLE table_name SET %s = '%s'" %(.join(fields), .join(vals))"
Run Code Online (Sandbox Code Playgroud)
这会输出如下语句:
UPDATE TABLE table_name SET column1, column2 = ('value1','value2')
Run Code Online (Sandbox Code Playgroud)
我需要输出标准格式来更新表格,如:
UPDATE table_name SET column1=value1, column2=value2
Run Code Online (Sandbox Code Playgroud) 在写入我通过将其传递给使用多处理实现的工作函数共享的打开文件时,文件内容未正确写入。相反 '^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@^' 写入文件。
为什么会发生这种情况?您不能将多个多处理单元写入同一个文件吗?你需要使用锁吗?队列?我是否没有正确或有效地使用多处理?
我觉得一些示例代码可能会有所帮助,但请仅将其作为我打开文件并通过多处理将打开的文件传递给另一个对该文件进行写入的函数的参考。
多处理文件:
import multiprocessing as mp
class PrepWorker():
def worker(self, open_file):
for i in range(1,1000000):
data = GetDataAboutI() # This function would be in a separate file
open_file.write(data)
open_file.flush()
return
if __name__ == '__main__':
open_file = open('/data/test.csv', 'w+')
for i in range(4):
p = mp.Process(target=PrepWorker().worker, args=(open_file,))
jobs.append(p)
p.start()
for j in jobs:
j.join()
print '{0}.exitcode = {1}' .format(j.name, j.exitcode)
open_file.close()
Run Code Online (Sandbox Code Playgroud) 我有一个大型数据集,其中包含以下格式的各种日期信息:
我熟悉python的时间模块,strptime()方法和strftime()方法.但是,如果有一个python模块可用于转换这些不寻常的日期格式,我不确定上面的这些日期格式是什么.
知道如何在不编写自己的计算器的情况下从这些不寻常的日期格式中获取%Y%M%D格式吗?
谢谢.
我是使用python进行简单数学运算的新手,很抱歉,如果这是一个愚蠢的问题.
我有8个变量都设置为整数,这些整数在执行简单计算时使用.
a = 0
b = 17
c = 152
d = 1
e = 133
f = 19
g = 20
h = 0
answer = ( ( ( a / f ) + b + c ) - ( g + ( h / f ) ) ) / ( d / f )
print answer
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到错误,ZeroDivisionError:整数除法或模数为零.
我已经读过关于这个错误的所有文档指向我的除数为零,但是如果我用数字作为字符串来代替变量打印,我得到:
( ( ( 0 / 19 ) + 17 + 152 ) - ( 20 + ( 0 / …Run Code Online (Sandbox Code Playgroud) 我在多处理设置中使用 Redis 作为生产者/消费者关系的队列。
我的问题是我的生产者使我的消费者超载,然后窃取了它的 CPU。
我的问题是,我可以在此设置中将整个处理器分配给特定的功能/进程(即:消费者)。
我正在寻找对此循环更优雅的解决方案。我的双端队列是动态创建的,并且长度可以变化。在下面的示例中,列表只有两个项目,可能最多三个项目。在我的应用程序中,列表最多可以包含30个项目。因此,我想避免编写大量的if语句,并在双端队列为空后停止执行代码。
from collections import deque
my_list = [ 1,2 ]
my_deque = deque ( my_list )
while my_deque:
alpha = my_deque.popleft()
beta = my_deque.popleft()
gamma = my_deque.popleft()
Run Code Online (Sandbox Code Playgroud)
上面的代码执行所有三个命令,并且在gamma命令上返回“ IndexError:从空双端队列弹出”。我了解为什么会发生此错误,但是想知道是否缺少一种技巧来评估while循环中间的列表/双端队列是否为空(或另一种创造性的循环长列表的方式) 。
谢谢您的帮助。
python ×6
cpu ×1
date ×1
deque ×1
dictionary ×1
division ×1
file-writing ×1
indexing ×1
list ×1
modulo ×1
mysql ×1
python-2.7 ×1
strftime ×1
strptime ×1
while-loop ×1