Merge branch 'feature/se' into feature/1223
Showing
6 changed files
with
176 additions
and
2 deletions
... | @@ -1178,6 +1178,9 @@ DDA_OCR_FIELD = 'bs_ocr' | ... | @@ -1178,6 +1178,9 @@ DDA_OCR_FIELD = 'bs_ocr' |
1178 | HMH_OCR_FIELD = 'hmh_ocr' | 1178 | HMH_OCR_FIELD = 'hmh_ocr' |
1179 | JYPZ_OCR_FIELD = 'jypz_ocr' | 1179 | JYPZ_OCR_FIELD = 'jypz_ocr' |
1180 | HT_FIELD = 'ht_ocr' | 1180 | HT_FIELD = 'ht_ocr' |
1181 | BD_FIELD = 'bd_ocr' | ||
1182 | BS_FIELD = 'bss_ocr' | ||
1183 | BS_CLASSIFY = 10087 | ||
1181 | 1184 | ||
1182 | RESULT_MAPPING = { | 1185 | RESULT_MAPPING = { |
1183 | MVI_CLASSIFY: MVI_OCR_FIELD, | 1186 | MVI_CLASSIFY: MVI_OCR_FIELD, |
... | @@ -1195,9 +1198,11 @@ RESULT_MAPPING = { | ... | @@ -1195,9 +1198,11 @@ RESULT_MAPPING = { |
1195 | HMH_CLASSIFY: HMH_OCR_FIELD, | 1198 | HMH_CLASSIFY: HMH_OCR_FIELD, |
1196 | JYPZ_CLASSIFY: JYPZ_OCR_FIELD, | 1199 | JYPZ_CLASSIFY: JYPZ_OCR_FIELD, |
1197 | CONTRACT_CLASSIFY: HT_FIELD, | 1200 | CONTRACT_CLASSIFY: HT_FIELD, |
1201 | INSURANCE_CLASSIFY: BD_FIELD, | ||
1202 | BS_CLASSIFY: BS_FIELD, | ||
1198 | } | 1203 | } |
1199 | 1204 | ||
1200 | CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD) | 1205 | CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD, BS_FIELD) |
1201 | 1206 | ||
1202 | COMPARE_FIELDS = (MVI_OCR_FIELD, | 1207 | COMPARE_FIELDS = (MVI_OCR_FIELD, |
1203 | IC_OCR_FIELD, | 1208 | IC_OCR_FIELD, |
... | @@ -1213,6 +1218,8 @@ COMPARE_FIELDS = (MVI_OCR_FIELD, | ... | @@ -1213,6 +1218,8 @@ COMPARE_FIELDS = (MVI_OCR_FIELD, |
1213 | HMH_OCR_FIELD, | 1218 | HMH_OCR_FIELD, |
1214 | JYPZ_OCR_FIELD, | 1219 | JYPZ_OCR_FIELD, |
1215 | HT_FIELD, | 1220 | HT_FIELD, |
1221 | BD_FIELD, | ||
1222 | BS_FIELD, | ||
1216 | ) | 1223 | ) |
1217 | 1224 | ||
1218 | # 身份证 | 1225 | # 身份证 |
... | @@ -1393,7 +1400,10 @@ SE_STAMP_VALUE = '有' | ... | @@ -1393,7 +1400,10 @@ SE_STAMP_VALUE = '有' |
1393 | SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' | 1400 | SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' |
1394 | SE_GB_NEW_FIELD = ['vinNo'] | 1401 | SE_GB_NEW_FIELD = ['vinNo'] |
1395 | SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] | 1402 | SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] |
1403 | SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人)户名', '(担保人)打印日期', '(担保人)流水日期'] | ||
1396 | SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] | 1404 | SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] |
1405 | SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计'] | ||
1406 | JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0'] | ||
1397 | 1407 | ||
1398 | SE_BANK_FIELD = ['accountNo', 'bankName'] | 1408 | SE_BANK_FIELD = ['accountNo', 'bankName'] |
1399 | SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] | 1409 | SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] |
... | @@ -1502,6 +1512,8 @@ DDA_EN = 'DDA' | ... | @@ -1502,6 +1512,8 @@ DDA_EN = 'DDA' |
1502 | HMH_EN = 'Mortgage Waiver Letter' | 1512 | HMH_EN = 'Mortgage Waiver Letter' |
1503 | JYPZ_EN = 'Used Car Document' | 1513 | JYPZ_EN = 'Used Car Document' |
1504 | AFC_CONTRACT_EN = 'AFC Contract' | 1514 | AFC_CONTRACT_EN = 'AFC Contract' |
1515 | BD_EN = 'Insurance' | ||
1516 | BS_EN = 'Bank Statement' | ||
1505 | 1517 | ||
1506 | SKIP_CARD = {SME_BL_EN} | 1518 | SKIP_CARD = {SME_BL_EN} |
1507 | 1519 | ||
... | @@ -1643,6 +1655,31 @@ HMH_COMPARE_LOGIC = { | ... | @@ -1643,6 +1655,31 @@ HMH_COMPARE_LOGIC = { |
1643 | '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'), | 1655 | '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'), |
1644 | } | 1656 | } |
1645 | 1657 | ||
1658 | BD_COMPARE_LOGIC = { | ||
1659 | '被保险人姓名': ('被保险人姓名', 'se_name_compare', {}, '保单被保险人姓名与系统不一致'), | ||
1660 | '被保险人证件号码': ('被保险人证件号码', 'se_common_compare', {}, '保单被保险人证件号码与系统不一致'), | ||
1661 | '车架号': ('车架号', 'se_common_compare', {}, '保单车架号与系统不一致'), | ||
1662 | '机动车损失保险金额': ('机动车损失保险金额', 'se_amount_lte_compare', {}, '保单车损险异常'), | ||
1663 | '第三者责任保险金额': ('机动车第三者责任保险金额', 'se_amount_lte_compare', {}, '保单三者险异常'), | ||
1664 | '绝对免赔率': ('机动车损失保险绝对免赔率/绝对免赔额', 'se_one_compare', {}, '保单无绝对免赔项'), | ||
1665 | '保险起始日期': ('保险起始日期', 'se_bd_date_compare', {'start': True}, '保单起始时间有误'), | ||
1666 | '保险截止日期': ('保险截止日期', 'se_bd_date_compare', {}, '保单截止时间有误'), | ||
1667 | '保单章': ('保单章', 'se_common_compare', {}, '保单无保单章'), | ||
1668 | '第一受益人': ('特别约定第一受益人', 'se_common_compare', {}, '保单第一受益人有误,需人工核查'), | ||
1669 | '保险费合计': ('保险费合计', 'se_amount_compare', {}, '保单保费疑似无法覆盖ASP保险融资'), | ||
1670 | } | ||
1671 | |||
1672 | BS_COMPARE_LOGIC = { | ||
1673 | '户名': ('role', 'se_one_compare', {}, '主共借人未提供银行流水'), | ||
1674 | '(担保人)户名': ('role', 'se_one_compare', {}, '担保人未提供银行流水,需人工查看直系亲属关系'), | ||
1675 | '打印日期': ('print_time', 'se_bs_print_date_compare', {}, '主共借人银行流水打印日期异常'), | ||
1676 | '(担保人)打印日期': ('print_time', 'se_bs_print_date_compare', {}, '担保人银行流水打印日期异常'), | ||
1677 | '流水日期': ('date', 'se_bs_date_compare', {}, '主共借人银行流水日期异常'), | ||
1678 | '(担保人)流水日期': ('date', 'se_bs_date_compare', {}, '担保人银行流水日期异常'), | ||
1679 | } | ||
1680 | |||
1681 | SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' | ||
1682 | |||
1646 | HT_COMPARE_LOGIC = { | 1683 | HT_COMPARE_LOGIC = { |
1647 | '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), | 1684 | '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), |
1648 | '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'), | 1685 | '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'), |
... | @@ -1710,7 +1747,9 @@ SE_COMPARE_FIELD = { | ... | @@ -1710,7 +1747,9 @@ SE_COMPARE_FIELD = { |
1710 | DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), | 1747 | DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), |
1711 | HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), | 1748 | HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), |
1712 | JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), | 1749 | JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), |
1713 | AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False) | 1750 | AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False), |
1751 | BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False), | ||
1752 | BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False), | ||
1714 | } | 1753 | } |
1715 | 1754 | ||
1716 | 1755 | ... | ... |
... | @@ -872,6 +872,43 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -872,6 +872,43 @@ class Command(BaseCommand, LoggerMixin): |
872 | summary['role'] = self.get_most(summary['role']) | 872 | summary['role'] = self.get_most(summary['role']) |
873 | return bs_summary | 873 | return bs_summary |
874 | 874 | ||
875 | def rebuild_bs(self, bs_summary): | ||
876 | # bs_summary = { | ||
877 | # '卡号': { | ||
878 | # 'classify': 0, | ||
879 | # 'confidence': 0.9, | ||
880 | # 'role': '柳雪', | ||
881 | # 'code': [('page', 'code'), ], | ||
882 | # 'verify': [(pno, ino, reason_str), ] | ||
883 | # 'print_time': 'datetime', | ||
884 | # 'start_date': 'datetime', | ||
885 | # 'end_date': 'datetime', | ||
886 | # 'sheet': ['sheet_name'] | ||
887 | # } | ||
888 | # } | ||
889 | res = [] | ||
890 | for bs_info in bs_summary.values(): | ||
891 | try: | ||
892 | print_date = bs_info.get('print_time', '').strftime("%Y-%m-%d") | ||
893 | except Exception as e: | ||
894 | print_date = '' | ||
895 | try: | ||
896 | start_date = bs_info.get('start_date', '').strftime("%Y-%m-%d") | ||
897 | except Exception as e: | ||
898 | start_date = '' | ||
899 | try: | ||
900 | end_date = bs_info.get('end_date', '').strftime("%Y-%m-%d") | ||
901 | except Exception as e: | ||
902 | end_date = '' | ||
903 | res.append( | ||
904 | { | ||
905 | 'role': bs_info.get('role', ''), | ||
906 | 'print_time': print_date, | ||
907 | 'date': [start_date, end_date], | ||
908 | } | ||
909 | ) | ||
910 | return res | ||
911 | |||
875 | def rebuild_contract(self, contract_result_compare): | 912 | def rebuild_contract(self, contract_result_compare): |
876 | res_list = [] | 913 | res_list = [] |
877 | for classify, page_info_dict in contract_result_compare.items(): | 914 | for classify, page_info_dict in contract_result_compare.items(): |
... | @@ -1626,6 +1663,10 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -1626,6 +1663,10 @@ class Command(BaseCommand, LoggerMixin): |
1626 | if len(contract_result_compare_rebuild) > 0: | 1663 | if len(contract_result_compare_rebuild) > 0: |
1627 | license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild | 1664 | license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild |
1628 | 1665 | ||
1666 | bs_rebuild = self.rebuild_bs(merged_bs_summary) | ||
1667 | if len(bs_rebuild) > 0: | ||
1668 | license_summary[consts.BS_CLASSIFY] = bs_rebuild | ||
1669 | |||
1629 | # 比对 | 1670 | # 比对 |
1630 | if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]: | 1671 | if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]: |
1631 | try: | 1672 | try: | ... | ... |
... | @@ -314,6 +314,8 @@ class AFCOCRResult(models.Model): | ... | @@ -314,6 +314,8 @@ class AFCOCRResult(models.Model): |
314 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") | 314 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") |
315 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") | 315 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") |
316 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") | 316 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") |
317 | bd_ocr = models.TextField(null=True, verbose_name="保单") | ||
318 | bss_ocr = models.TextField(null=True, verbose_name="银行流水") | ||
317 | 319 | ||
318 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | 320 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') |
319 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | 321 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') |
... | @@ -344,6 +346,8 @@ class HILOCRResult(models.Model): | ... | @@ -344,6 +346,8 @@ class HILOCRResult(models.Model): |
344 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") | 346 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") |
345 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") | 347 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") |
346 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") | 348 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") |
349 | bd_ocr = models.TextField(null=True, verbose_name="保单") | ||
350 | bss_ocr = models.TextField(null=True, verbose_name="银行流水") | ||
347 | 351 | ||
348 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | 352 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') |
349 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | 353 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') |
... | @@ -373,6 +377,8 @@ class AFCSEOCRResult(models.Model): | ... | @@ -373,6 +377,8 @@ class AFCSEOCRResult(models.Model): |
373 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") | 377 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") |
374 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") | 378 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") |
375 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") | 379 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") |
380 | bd_ocr = models.TextField(null=True, verbose_name="保单") | ||
381 | bss_ocr = models.TextField(null=True, verbose_name="银行流水") | ||
376 | 382 | ||
377 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | 383 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') |
378 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | 384 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') |
... | @@ -403,6 +409,8 @@ class HILSEOCRResult(models.Model): | ... | @@ -403,6 +409,8 @@ class HILSEOCRResult(models.Model): |
403 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") | 409 | hmh_ocr = models.TextField(null=True, verbose_name="豁免函") |
404 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") | 410 | jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") |
405 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") | 411 | ht_ocr = models.TextField(null=True, verbose_name="AFC合同") |
412 | bd_ocr = models.TextField(null=True, verbose_name="保单") | ||
413 | bss_ocr = models.TextField(null=True, verbose_name="银行流水") | ||
406 | 414 | ||
407 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') | 415 | update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') |
408 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | 416 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') | ... | ... |
This diff is collapsed.
Click to expand it.
... | @@ -363,6 +363,15 @@ class Comparison: | ... | @@ -363,6 +363,15 @@ class Comparison: |
363 | input_tmp = input_str.replace('元', '').replace(',', '') | 363 | input_tmp = input_str.replace('元', '').replace(',', '') |
364 | return self.build_res(ocr_tmp == input_tmp) | 364 | return self.build_res(ocr_tmp == input_tmp) |
365 | 365 | ||
366 | def se_amount_lte_compare(self, input_str, ocr_str, **kwargs): | ||
367 | try: | ||
368 | float_input = float(input_str) | ||
369 | float_ocr = float(ocr_str) | ||
370 | except Exception as e: | ||
371 | return self.RESULT_N | ||
372 | else: | ||
373 | return self.build_res(float_ocr >= float_input) | ||
374 | |||
366 | def se_amount_compare(self, input_str, ocr_str, **kwargs): | 375 | def se_amount_compare(self, input_str, ocr_str, **kwargs): |
367 | if input_str == ocr_str: | 376 | if input_str == ocr_str: |
368 | return self.RESULT_Y | 377 | return self.RESULT_Y |
... | @@ -375,6 +384,12 @@ class Comparison: | ... | @@ -375,6 +384,12 @@ class Comparison: |
375 | else: | 384 | else: |
376 | return self.build_res(float_ocr == float_input) | 385 | return self.build_res(float_ocr == float_input) |
377 | 386 | ||
387 | def se_one_compare(self, input_list, ocr_str, **kwargs): | ||
388 | if isinstance(input_list, list): | ||
389 | if ocr_str in input_list: | ||
390 | return self.RESULT_Y | ||
391 | return self.RESULT_N | ||
392 | |||
378 | def se_company_compare(self, input_str, ocr_str, **kwargs): | 393 | def se_company_compare(self, input_str, ocr_str, **kwargs): |
379 | input_tmp = re.sub(self.re_obj, '', input_str).strip() | 394 | input_tmp = re.sub(self.re_obj, '', input_str).strip() |
380 | ocr_tmp = re.sub(self.re_obj, '', ocr_str).strip() | 395 | ocr_tmp = re.sub(self.re_obj, '', ocr_str).strip() |
... | @@ -439,6 +454,46 @@ class Comparison: | ... | @@ -439,6 +454,46 @@ class Comparison: |
439 | else: | 454 | else: |
440 | return self.build_res(compare_date <= ocr_date) | 455 | return self.build_res(compare_date <= ocr_date) |
441 | 456 | ||
457 | def se_bd_date_compare(self, input_str, ocr_str, **kwargs): | ||
458 | try: | ||
459 | input_date = datetime.strptime(input_str, "%Y-%m-%d").date() | ||
460 | ocr_date = datetime.strptime(ocr_str, "%Y-%m-%d").date() | ||
461 | if kwargs.get('start', False): | ||
462 | if input_date != ocr_date: | ||
463 | return self.RESULT_N | ||
464 | |||
465 | six_month_date = (datetime.today() - relativedelta(months=6)).date() | ||
466 | today_date = datetime.today().date() | ||
467 | return self.build_res(six_month_date <= ocr_date <= today_date) | ||
468 | else: | ||
469 | if input_date == ocr_date or ocr_date == input_date + relativedelta(days=1): | ||
470 | return self.RESULT_Y | ||
471 | return self.RESULT_N | ||
472 | except Exception as e: | ||
473 | return self.RESULT_N | ||
474 | |||
475 | def se_bs_print_date_compare(self, input_str, ocr_str, **kwargs): | ||
476 | try: | ||
477 | input_date = datetime.strptime(input_str, "%Y-%m-%d") | ||
478 | ocr_date = datetime.strptime(ocr_str, "%Y-%m-%d") | ||
479 | if ocr_date >= input_date - relativedelta(days=15): | ||
480 | return self.RESULT_Y | ||
481 | return self.RESULT_N | ||
482 | except Exception as e: | ||
483 | return self.RESULT_N | ||
484 | |||
485 | def se_bs_date_compare(self, input_str, ocr_str_list, **kwargs): | ||
486 | if isinstance(ocr_str_list, list) and len(ocr_str_list) == 2: | ||
487 | try: | ||
488 | start_date = datetime.strptime(ocr_str_list[0], "%Y-%m-%d") | ||
489 | end_date = datetime.strptime(ocr_str_list[1], "%Y-%m-%d") | ||
490 | if end_date >= start_date + relativedelta(months=3): | ||
491 | return self.RESULT_Y | ||
492 | return self.RESULT_N | ||
493 | except Exception as e: | ||
494 | return self.RESULT_N | ||
495 | return self.RESULT_N | ||
496 | |||
442 | 497 | ||
443 | cp = Comparison() | 498 | cp = Comparison() |
444 | 499 | ... | ... |
src/common/tools/mssql_script11.py
0 → 100644
1 | import pyodbc | ||
2 | |||
3 | hil_sql = """ | ||
4 | ALTER TABLE hil_ocr_result ADD bd_ocr nvarchar(max); | ||
5 | ALTER TABLE hil_ocr_result ADD bss_ocr nvarchar(max); | ||
6 | ALTER TABLE hil_se_ocr_result ADD bd_ocr nvarchar(max); | ||
7 | ALTER TABLE hil_se_ocr_result ADD bss_ocr nvarchar(max); | ||
8 | """ | ||
9 | |||
10 | afc_sql = """ | ||
11 | ALTER TABLE afc_ocr_result ADD bd_ocr nvarchar(max); | ||
12 | ALTER TABLE afc_ocr_result ADD bss_ocr nvarchar(max); | ||
13 | ALTER TABLE afc_se_ocr_result ADD bss_ocr nvarchar(max); | ||
14 | ALTER TABLE afc_se_ocr_result ADD bd_ocr nvarchar(max); | ||
15 | """ | ||
16 | |||
17 | hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True) | ||
18 | |||
19 | hil_cursor = hil_cnxn.cursor() | ||
20 | hil_cursor.execute(hil_sql) | ||
21 | |||
22 | hil_cursor.close() | ||
23 | hil_cnxn.close() | ||
24 | |||
25 | afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True) | ||
26 | |||
27 | afc_cursor = afc_cnxn.cursor() | ||
28 | afc_cursor.execute(afc_sql) | ||
29 | |||
30 | afc_cursor.close() | ||
31 | afc_cnxn.close() |
-
Please register or sign in to post a comment