python3中如何在多线程中操作sql server数据库 5C

python37+sql server+win10环境

大概的意思就是,在python中,我开启了n个线程,进入同一个函数,每个线程传递的参数都不一样:如下图:
图片说明
在再每个线程中,将传递过来的参数 update到数据库中,会报一个错误,我想是不是多个线程同时操作一个,导致锁死?如下图:

其中,
conn.connect()我只在程序最开始链接了一次,
conn.cloese(),和cursor.close()只在程序最结尾执行了一次。
每个线程中我试过在函数开头链接数据库,函数结尾关闭数据库,但是应该是串行的,即第一个线程链接数据库,更新数据,第二个线程等待...等到第一个线程关闭连接后,第二个线程才开始链接...
请高手指点一下,应该如何更改代码?

图片说明图片说明

4个回答

你这样就是每执行一次线程,都会连接一次数据库,这样当然会乱了
你把conn =pymsql.connect()和cursor = conn.cursor( )函数放到for i in range(count):语句的上面
然后再func1函数加个cursor的参数传入cursor就行了
这样在开头打开数据库,然后执行多线程把数据放入数据库
然后关闭数据库的语句放在执行线程完了以后,就是最后一行。这样试试看

gjfvip123
gjfvip123 回复lgyt240054: 哦哦,你说的func1加个参数把cursor穿进去,这样也行吗?这个我不太理解,方便加个qq不
一年多之前 回复
lgyt240054
EuclideanSpace 回复gjfvip123: 是啊,只在开头开启一次,然后不断写入就行了。你放到线程里面,每次执行线程都要开?这样不乱才怪呢
一年多之前 回复
gjfvip123
gjfvip123 你的意思是把conn =pymsql.connect()和cursor = conn.cursor( )放到循环上边?那不还是开启一次连接吗?
一年多之前 回复

建议写一个线程池,然后多线程阻塞去操作数据库,保证原子性

多线程同时读写sqlite是可以的,但是需要在所有的sql操作后都要检查返回码,如果是被占用的错误的,要有重试机制就可以了。

gjfvip123
gjfvip123 大哥,你说的检查返回码 是哪些语句?我找不到啊。。。
一年多之前 回复

第一,你的数据库死锁问题一般来说是可以在ID列加个索引就可以解决了。
第二,你的多线程并不是通常意义上的多线程,只是把每一个update都弄进一个线程里面跑,打个比方,就是别人的
多线程是-线程1:1、2、3,线程2:4、5、6,线程3:7、8、9,而你的多线程就是--线程1:1,线程2:2,线程3:3……当然,这样做并没有
什么问题~
第三,用队列来控制多线程的冲突问题在目前应该是比较好的方法
第四,你的问题可以试一下用pandas的dataframe,to_sql方法来批量插入,会快N多倍。建议研究一下。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何在多线程Socket中操作数据库。
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]rn背景:Socket是iOS即时通讯的服务端Socket。消息全部通过该服务端转发。rnSocket是用的EMTASS2_1。通过3条线程处理,分别是 数据包处理线程,侦听客户端连接请求线程,资源清理线程。rnrn现在的问题是,在数据包处理线程解析出消息之后,需要做数据库的查询与插入操作。可是数据库操作是很费时的啊。直接放在数据包处理线程里面真的好么?。 求高手指点指点,怪自己以前没学好多线程。
如何在SQL SERVER数据库中插入数据?
请问各位大哥,如何实现在SQL SERVER 数据中插入一条数据,是这样子的,就是像Excel那样,可以在中间或任意地方插入。谢谢!
sql server学习笔记-day6(如何在java程序中操作数据库?)
前面已经学习了什么是数据库和对数据的一些操作方法,那么,我们应该如何在java程序中操作sql server数据库呢? 期望目标: 1.掌握sql server数据库的备份和恢复技巧 2.掌握java对表的crud(增删改查)操作 3.掌握 Statement 和 PreparedStatement 类 4.能完成一般的java数据库编程任务 1.数据库的备份与
如何在 Python3 中操作数据
安装conda install pymysqlimport pymysqlconn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='db_jpa')# drop DATABASE IF EXISTS pymysql CREATE_DATABASE_SQL = """ CREATE DATABASE IF N
如何在多线程操作数据库--多线程串行
1前提 很多时候我们都是在主线程下直接打开数据库并对数据库操作的,但如果遇到加密型的数据库,例如SQLCipher加密数据库,或者是对字段进行加密的数据库;你就不得不在线程里面操作数据库了! 2解决 大家都知道,在多线程操作数据库的时候,如果在各自线程中都利用之前的方法:实例化一个SQLiteOpenHelper类,然后在调用其中的方法。后面的就会遇到android.databa
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!救命。如何在多线程中操作Access
救命呀。rn听说DAO不行。那么ADO能不能用呀?rn我的头发都白了8(rn谢谢了。rnrn
多线程中操作数据库
基本要求:主线程建立一个主连接,在多个子线程中,每个子线程分别建立自己的DataAdapter和DataSet,不同的子线程操作的是同一个数据表,但是总是报错,不知何故.
如何在oracle中的sql plus中操作其它数据库?
如何在oracle中的sql plus中或是存储过程中操作其它的数据库,听说是有方法的,请高手指教。
如何在SQL SERVER查询分析器中访问SQL Anywhere数据库
如何在SQL SERVER查询分析器中访问SQL Anywhere数据库
如何在多线程中使用ADO数据控件操作数据库?
本人在做一个多线程程序,需要在线程中操作数据库,请问rn1:能不能在线程中使用主窗体的ADO控件(TADOConnection、TADOQuery、TADOStoredProc),看书好像不能多线程操作VCL?rn2:如果不能,在线程中该怎么做?
如何在多线程中操作数据库?高分请教
本人的一个IC卡数据采集系统,需要在子线程中把窜口采集的数据写入到SQLSERVER数据库中,本人测试了ADO和MFC的数据操作类,都提示相同的访问报错。但是不在子线程中使用ADO就不会报错了。为什么?需要注意些什么?请各位高受赐教,能否给一些列子?rn
如何在SQL Server 2005中操作Access数据库
如何在Sql Server 2005的T-SQL中向C盘根目录下的mdb.mdb这个数据库的某个表插入一条数据?
如何在delphi中操作SQL SERVER的UniqueIdentifier字段
比如我在用fieldbyname().asstring时就会提示没有该字段
如何在windows服务程序中操作数据库
使用delephi新建 service applicationrn在Tservice上加了一个TADOQuery控件rn然后在TService的onExecute中加入操作数据库的语句rn每次在执行TADOQuery1.excSQL语句时促发异常,不知何故rnrn
请教:如何在SQL Server中保存图片?
在我设计的一个程序中,需要显示人的照片,Delphi控件使用TDBimage,但不知道图片如何存入SQL Server数据库的table中, 请大虾指教,写出相关的语句.(我是个新手,这个问题有一些网友已经给出了一些方法,但都不太具体,先向他们致谢!其中有一个网友说:可以直接赋值即可,能写出具体语句好吗)rn
如何在SQL server中存取图片?
VB6.0,SQL server7.rn其它文本类的字段存取无问题,图片存入是用的:Rst1.Fields("Pic").AppendChunk Image1.Picturern结果提示“变量或类型不正确,或者不在可接受的范围内,要不就是与其他数据冲突”,指向语句:rst1("Pic").AppendChunk image1.Picture,(字段pic的类型设为image),请问是为什么?rn
如何在SQL SERVER中建立函数依赖?
一个关系模式中的函数依赖,可以在SQL SERVER2005里面建立么.rnrn例如一个表T(A,B,C,D)函数依赖F(A决定B,A决定C,A决定D,B决定A) 将A设为PRIM KEYrn有办法在SQLSERVER2005里面体现出B决定A这个函数依赖关系么?rn
如何在SQL Server中定时触发?
请教各位高手,如何在SQL Server 2000中实现象VB中的Timer控件一样的功能,定时调用某个存储过程??
如何在sql server中写存储过程?
以前我们做的程序从来没有写过存储过程!哪位可以写一个简单的范例?不甚感激!
如何在sql server中实现?
偶想实现让表单号自动加1,比如说,当前记录中的一个字段当前字段是000001,当偶存入新的记录的时候,表单号自动的变成000002rn请问,如何在sql server中实现这个功能,谢谢
如何在sql server中批量插入数据
譬如一张两个字段的表:第一个字段是编号,第二个是名称。现在假如希望插入1000条数据,编号为数字不能重复(例如1——1000),名称可以重复,例如从“张三,李四”选择插入。rn请问应该怎样写sql语句?谢谢!
如何在SQL SERVER中进行递归?
编写存储过程中,如何进行函数的递归,也就是说如何自己递用自己.
如何在网页中链接SQL Server?
请问如何在网页中链接sql server呀?
如何在delphi中启动sql server?
如何在delphi中启动sql serverrn我在cmd下执行成功:net start mssqlserver?
BCB如何在SQL SERVER中自动建表?
BCB如何在SQL SERVER中自动建表?rn我想在SQL SERVER中每个月建一个表用来存储本月的数据,不知道该如何自动建表啊?谢谢各位的回复
如何在Sql Server 中存储附件
-
如何在SQL SERVER中输入图片?
请各位高手将详细的步骤告诉我。
如何在SQL Server中优化Tempdb
SQL Server默认有四个数据库系统,其中一个称为tempdb。tempdb用于许多SQL操作,包括创建用户定义的临时对象,内部临时对象和版本存储,以及其他功能,如联机重新索引,多个活动记录集(MARS)等。优化服务器的临时数据库是提高服务器性能的最佳方法之一。继续阅读以了解有关如何在SQL Server中优化tempdb的一些要点。 需要注意的一个事实是每个人都在使用相同tempdb的实例...
如何在sql server中使用循环语句
declare @i int set @i=1 while @i<100 begin insert into [BlackPlum].[dbo].[Customer] ([CustomerCode], [VIPNo] , [Company] ,[CustomerName] , [Address] , ...
如何在SQL Server的查询分析器中传递参数?
use TbDatarn@FromDate Datetime = getdate()rn@ToDate Datetime = getdate()rnexec myStoreProc @TransDate,@EndDaternrn我这样写出错,请教应如何写呢? 谢谢!
如何在sql server中插入变量值
已知变量 int a ;int b ;char c;rn怎么把这3个变量插入到表Information中?
如何在SQL SERVER 中实现自动备份
请教各位如何在SQL SERVER 中实现自动备份
如何在sql server中建表
如何在sql server中建表rn
如何在c++中访问sql server?
如何在c++中访问sql server?不要mfc的组件啊!
如何在sql server中存储图片?
我的product表中想设置一个pic字段,利用DBImage控件,将图片显示出来,我将pic字段rn设置为varchar型,键入图片的路径,可是怎么也显示不出来,如将字段设为Image型,该字段不能编辑,不知怎样将图片放进去,还望大家多多指点!rn
如何在sql server中保存图像数据
请问各位大虾如何在sql server中保存大量的图像数据,并且不能使sql server的执行效率降低。我们现在想在数据库中保存图像路径,而将图像数据保存在文件中,但是这样做就必须在服务器端写一个监视程序用来和客户端程序来交换图像文件。不知道有没有其他的方法。比如让sql server来完成这样的功能,或者提供一种保存的方法使系统效率不会降低。
如何在sql server中保存图像
请教一下,如何在sql server中保存图像?
如何在Sql Server 中使用正则表达式
  如果能在Sql Server中使用正则表达式,一定会对程序编写有很大帮助,那么如何实现呢?   其实Sql Server本身并不提供这样的功能,但我们如果能够通过Sql Server 调用VBScript,那么问题就有解决的可能,这中间我们要先详细了解三个系统级别的存数过程:sp_OACreate , sp_OASetProperty 和 sp_OAMethod sp_OACreate ...
如何在sql server中定义公式?
我想在一个表中设置如下的功能:如果表中的两个字段值相等,就把表中一个指定的字段赋予一个值,比如一个学生考试登记表,其中有user_answer(考生答案),question_answer(试题答案),rnquestion_mark(试题分数),user_mark(考生得分)这几个字段,如果user_answer与question_answer相等的话,就附user_mark为question_mark的值,否则的话为0rn这个好像可以直接在设计表时用一个公式实现,具体该如何做那?请指点
如何在sql server中存附件
现在我们公司正在开发一个办公自动化系统,开发语言是asprn数据库系统采用sql server,asp上传附件已经成功,但是如何在sql server中存附件呢?如,要把一篇word文档或一个zip文件存入sql server中,能不能办到呢?rn如果,您用vbrn或delphi 实现也可以!
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件