用可能用到的pymysql、random、pandas、numpy包写一段pymysql操作数据库的python代码,数据库名为t_enti,继而查询数据库分别有DICD、BRND、AQID、MTRC、CUNO、CARD、CLDT、CLTM、DJDT、DJTM的字段值,查询之后,往这些字段里面插入20000条数据,其中DICD、BRND、AQID是固定值分别为:“0156”、“727111”、“CTEL”,MTRC字段值是由C20230608+4位数的变量组成,CUNO字段值是由00122+7位随机整数组成,CARD字段值是由6字开头的随机18位整数银行卡号,最后的CLDT、CLTM、DJDT、DJTM字段值是固定值,分别为:20230608、92435、20230609、092438。要求该数据库的主键是CARD,CARD不能重复.
时间: 2023-08-22 19:07:19 浏览: 146
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
好的,以下是代码实现:
```python
import pymysql
import random
import pandas as pd
import numpy as np
# 连接数据库
db = pymysql.connect(host='localhost',
user='root',
password='123456',
database='t_enti',
charset='utf8mb4')
# 获取游标
cursor = db.cursor()
# 查询表中字段
sql = "SELECT DICD, BRND, AQID, MTRC, CUNO, CARD, CLDT, CLTM, DJDT, DJTM FROM t_enti"
cursor.execute(sql)
results = cursor.fetchall()
# 将查询结果转换为pandas DataFrame
df = pd.DataFrame(list(results), columns=['DICD', 'BRND', 'AQID', 'MTRC', 'CUNO', 'CARD', 'CLDT', 'CLTM', 'DJDT', 'DJTM'])
# 插入20000条数据
for i in range(20000):
DICD = '0156'
BRND = '727111'
AQID = 'CTEL'
MTRC = 'C2023' + str(random.randint(0, 9999)).zfill(4)
CUNO = '00122' + str(random.randint(0, 9999999)).zfill(7)
CARD = str(random.randint(600000000000000000, 699999999999999999))
while CARD in df['CARD'].values:
CARD = str(random.randint(600000000000000000, 699999999999999999))
CLDT = '20230608'
CLTM = '92435'
DJDT = '20230609'
DJTM = '092438'
# 插入数据
sql = "INSERT INTO t_enti (DICD, BRND, AQID, MTRC, CUNO, CARD, CLDT, CLTM, DJDT, DJTM) " \
"VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
(DICD, BRND, AQID, MTRC, CUNO, CARD, CLDT, CLTM, DJDT, DJTM)
cursor.execute(sql)
db.commit()
# 关闭游标和数据库连接
cursor.close()
db.close()
```
这段代码会先查询表中所有字段,然后将查询结果转换为pandas DataFrame,之后插入20000条数据。其中,CARD字段要求不能重复,因此在每次插入数据前,会循环检查CARD字段是否已经存在于查询结果中,直到找到一个新的不重复的CARD值为止。
阅读全文