我有一个名为tbltest的数据库,它有4列:Id,Fname,Lname,Iscategorized。我必须将数据从它的前三列复制到另一个数据库tblcopy,它有4列:Id、Fname、Lname、Service_number。我只在Iscategorized为0时复制数据,复制后更新为1。Service列告诉python服务正在复制数据。下面是我使用服务1复制时使用的代码。在
import time
var = True
while var == True:
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","root","amanbaweja","test" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = "SELECT * FROM tbltester\
WHERE iscategorized = '%d'" % (0) + " limit 0,1 "
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
id = row[0]
fname = row[1]
lname = row[2]
iscategorized = row[3]
# Now print fetched result
print "id=%s,fname=%s,lname=%s,iscategorized=%s" % \
(id, fname, lname, iscategorized)
cursor.execute('''INSERT into tblcopy (Id, Fname, Lname, Service_number) values(%s, %s, %s, %s)''',(id, fname, lname, "service1"))
sql1 = "UPDATE tbltester SET iscategorized = 1 WHERE Id = '%s'" % id
cursor.execute(sql1)
db.commit()
db.close()
现在,随着我的数据库动态地变得越来越大,我使用多台机器来运行我的python服务。python服务使用管理器一起运行。如果我用上面提到的代码运行10个服务,那么在tblcopy中会创建大约5个不同的条目,因为5个python服务一次获得相同的id。有没有SQL方法可以解决我的问题?我们可以用存储过程来做这个吗?在
提前谢谢你的帮助。在
并行化此操作没有意义,因为它是I/O绑定的:所有}都需要经历相同的瓶颈,即数据库引擎和硬盘。这种方法实际上会比较慢,因为您现在引入了并发问题。在
SELECT
和{重写(单线程)过程如下:
如果在你最初的
SELECT
和你最后的UPDATE
之间有一些重要的(持久的)处理,那就不同了。在由于其他几个原因,此代码效率低下:
而且,似乎有一个无限的
while
循环。如果您想让一个“服务”在表之间不断地复制数据,那么您可能需要在循环中添加一个短暂的延迟,以避免在没有要处理的情况下不断地访问数据库。或者,可能更可取的是,您可能希望查看triggers。相关问题 更多 >
编程相关推荐