鱼C论坛

 找回密码
 立即注册
查看: 1328|回复: 2

数据操作执行很慢

[复制链接]
发表于 2021-5-19 17:38:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
做了一个填充数据库的程序,先读取两个个包含男女常用名字的文本,一个常见姓氏文本,随机生成一个名字,根据读取的文本决定男女,之后就是冲数据库中取出地址,根据地址的行政区划编码,随机生成身份证号,
但是上机执行的时候发现执行很慢,每秒向数据库中填充的数据只有20-30条,我预计会有几百条,这还是放在服务器上的结果,如果放在本地,执行效率就只有每秒两三条了,求解如何提高执行速度?
  1. import pymysql
  2. import random
  3. import time
  4. def xmxb():
  5.     with open("姓.txt","r") as f:
  6.         xing = f.read()
  7.     with open("男名.txt","r") as f:
  8.         nanming = f.read()
  9.     with open("女名.txt","r") as f:
  10.         nvming = f.read()
  11.    

  12.     len_mz = 0
  13.     xb = random.randint(0,100)
  14.     sjs = random.randint(0,100)
  15.     if sjs < 60:
  16.         len_mz = 3
  17.     else:
  18.         len_mz = 2
  19.     ##############################
  20.     if len_mz == 3:
  21.         if xb < 50:
  22.             xingbie = "男"
  23.             xingming = random.choice(xing)+random.choice(nanming)+random.choice(nanming)
  24.         else:
  25.             xingbie = "女"
  26.             xingming = random.choice(xing)+random.choice(nvming)+random.choice(nvming)
  27.     else:
  28.         if xb < 50:
  29.             xingbie = "男"
  30.             xingming = random.choice(xing)+random.choice(nanming)
  31.         else:
  32.             xingbie = "女"
  33.             xingming = random.choice(xing)+random.choice(nvming)
  34.     return (xingming , xingbie)

  35. def xzbm():
  36.     db = pymysql.connect(host="www.dfs***.cn", user="*****", password="*****", db="dfzxdb")
  37.     cursor = db.cursor()
  38.     #定义SQL语句
  39.     limit = random.randint(0,614559)
  40.     sql = "select * from `xzqh-cun` limit " + str(limit) + ",1"

  41.     #执行语句
  42.     try:
  43.        #print("正在从远端服务器获取数据。。。")
  44.        cursor.execute(sql)
  45.        results = cursor.fetchall()
  46.        #print(results)
  47.        #for i in results:
  48.             #print(i[0])
  49.             #print(results)
  50.     except:
  51.         print("连接数据库错误。")

  52.     db.close()
  53.     return(results[0][6],results[0][5]+results[0][4]+results[0][3]+results[0][2]+results[0][1])

  54. def csrq():
  55.     jn = random.randint(1,10000)
  56.     if jn == 1:
  57.         nian = random.randint(1890,1900)
  58.     if jn > 1 and jn<30:
  59.         nian = random.randint(1911,1920)
  60.     if jn >= 30 and jn < 100:
  61.         nian = random.randint(1921,1940)
  62.     if jn >= 100 and jn < 2000:
  63.         nian = random.randint(1941,1950)
  64.     if jn >= 2000 and jn < 5000:
  65.         nian = random.randint(1951,1970)
  66.     if jn >= 5000:
  67.         nian = random.randint(1971,2020)
  68.     #nian = random.randint(1890,2020)
  69.     yue = random.randint(1,12)
  70.     if yue == 2:
  71.         tian = random.randint(1,28)
  72.     if yue in [1,3,5,7,8,10,12]:
  73.         tian = random.randint(1,31)
  74.     if yue in [4,6,9,11]:
  75.         tian = random.randint(1,30)
  76.     if yue < 10:
  77.         s_month = "0" + str(yue)
  78.     else:
  79.         s_month = str(yue)
  80.     if tian < 10:
  81.         s_day = "0" + str(tian)
  82.     else:
  83.         s_day = str(tian)
  84.     #print(nian,yue,tian)
  85.     #print(str(nian),s_month,s_day)
  86.     birthday = str(nian) + s_month + s_day
  87.     return(birthday)

  88. def sfzh(xb , birthday , xzbm):
  89.     oum , jim = [] , []
  90.     for i in range(111,995):
  91.         if i % 2 == 1:
  92.             jim.append(str(i))
  93.         else:
  94.             oum.append(str(i))
  95.     dqm = xzbm[:6]
  96.     srm = birthday
  97.     if xb == "男":
  98.         sxm = random.choice(jim)
  99.     else:
  100.         sxm = random.choice(oum)
  101.     if xb == "男" and int(birthday[:4]) < 1920:
  102.         sxm = random.choice([997,999])
  103.     if xb == "女" and int(birthday[:4]) < 1920:
  104.         sxm = random.choice([996,998])
  105.     sxm1 = str(sxm)
  106.     s17 = dqm + srm + sxm1
  107.     #7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2

  108.     #1-0-X -9-8-7-6-5-4-3-2
  109.     s18list=(1,0,10,9,8,7,6,5,4,3,2)
  110.     yzm = int(s17[0]) * 7 + int(s17[1]) * 9 + int(s17[2]) * 10 + int(s17[3]) * 5 + int(s17[4]) * 8 + int(s17[5]) * 4 + int(s17[6]) * 2 + int(s17[7]) + int(s17[8]) * 6 + int(s17[9]) * 3 + int(s17[10]) * 7 + int(s17[11]) * 9 + int(s17[12]) * 10 + int(s17[13]) * 5 + int(s17[14]) * 8 + int(s17[15]) * 4 +int(s17[16]) * 2
  111.     ys = yzm % 11
  112.     s18 = s18list[ys]
  113.     if s18 == 10:
  114.         s_18 = "X"
  115.     else:
  116.         s_18 = str(s18)
  117.     sfzh = s17+s_18
  118.     return(sfzh)
  119. while True:
  120.     xm = xmxb()[0]
  121.     xb = xmxb()[1]
  122.     srm = csrq()
  123.     dqm = xzbm()

  124.     #print(dqm)
  125.     #csrq1 = csrq()
  126.     sfz = sfzh(xb,srm,str(dqm[0]))
  127.     print(xm,xb,sfz,dqm[1])
  128.     db = pymysql.connect(host = "www.dfs***.cn",user = "*****",password = "*****",db = "dfzxdb")
  129.     cursor = db.cursor()
  130.     sql = "INSERT INTO `rwxx`(xingming , xingbie , shenfenzheng , dizhi) VALUES('"+ xm +"','"+ xb +"','"+ sfz +"','"+ dqm[1] +"')"
  131.     try:
  132.         cursor.execute(sql)
  133.         db.commit()
  134.     except:
  135.         db.rollback()
  136.         print("数据库错误。")
  137.     db.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-23 15:52:50 | 显示全部楼层
多线程啊,多创建几个 mysql的用户,一个线程用一个账号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-25 13:35:02 | 显示全部楼层
你先测试,是操作数据库慢了,还是你生成算法慢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表