程序成功执行多次循环后提示 local variable 'conn' referenced before assignment

西落兮 2018-01-08 04:38:10
代码如下,如果程序没有问题的话,应该往数据库中的表插入了11996条数据,然而成功执行多次循环后(表里已经有8173行数据了) ,提示“UnboundLocalError: local variable 'conn' referenced before assignment” 。这是为什么呢,如果是局部变量的问题,那第二次循环就应该报错了吧? 麻烦大家指导一下
import time
import random
import pymssql
def getone(sql,*args):
try:
conn = pymssql.connect(host='127.0.0.1', user='sa', password='123456', database='fpjl')
except:
print("连接错误")
cur = conn.cursor()
cur.execute(sql,(args))
conn.commit()
conn.close()

fpdm='00000000144011620878'
qshm='00033005'
jshm='00045000'
tablename='js_fpmxzb'+time.strftime('%Y%m',time.localtime())
date=time.strftime('%Y-%m-%d',time.localtime())
sqlstr= ''' insert into {}( ID,JQBH,KPRQ,KPLX,FPHM,KPZJE,SKM,YFPHM,FPDM,FKR,KPYMC,XMS,CZR,CZSJ,jxzt,kpxm,ywlshm) values('{}','0000007010498297','{}','41',%s,'0.00','000000','00000000','{}',
'个人','文冲','0','wlkp','{}','0','','' ) '''.format(tablename,time.strftime('%Y%m',time.localtime())+str(random.randint(0,99999)),date,fpdm,date)
fphm=int(qshm)
while fphm<=int(jshm):
getone(sqlstr,('0000000'+str(fphm))[-8:])
fphm=fphm+1


...全文
1760 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckc 2018-01-08
  • 打赏
  • 举报
回复
显示这个之前应该会提示连接错误吧? 每一个查询都连接而且退出太浪费时间和资源了 应该在开始的时候连接,cur都设置好 函数里只需要有 cur.execute(sql,(args)) conn.commit() 这两句就可以了
oyljerry 2018-01-08
  • 打赏
  • 举报
回复
你用conn的地方都应该要放到try里面
sanGuo_uu 2018-01-08
  • 打赏
  • 举报
回复
大概改成这种(我没测试过)
def getone(sql,*args):
    try:
        conn = pymssql.connect(host='127.0.0.1', user='sa', password='123456', database='fpjl')
	    cur = conn.cursor()
	    cur.execute(sql,(args))
	    conn.commit()
	    conn.close()
    except Exception as ex:
        print("连接错误,",ex.value)
问题很明显,一旦报错,后面的conn就是没申明。 试试看是不是try的问题。 链接一次,insert一条——这种方法很不好

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧