在将csv文件内容插入数据库之前检查正确的数据类型

ruyhziif  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(291)

我使用文件上传查询将csv文件的内容插入mysql。

CREATE table my_table(
id int primary key,
name varchar(50),
mobile int(12),
);

我的csv文件内容如下: 1,"John",919898878878,"john@some.com" 2,"Grey",957738378373,"gre@some.com", 3,"Daniel",918786545656,"daniel@some.com" 我想在插入之前检查是否为字段提供了正确的数据,即,如果是电子邮件,则格式应为[a-za-z0-9]@[some domain],如果是手机号码,则所有字母应为整数。

sxpgvts3

sxpgvts31#

你可以用 javax.validation.constraints.Pattern . 第一个字段是要验证的正则表达式,第二个字段是验证失败时应显示的错误消息。
对于电子邮件,您可以指定如下。

@Pattern(regexp="^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
    + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$",
         message="{invalid.email}")
 protected String email;

您可以根据需要更改上述正则表达式。请在此处阅读更多信息https://docs.oracle.com/cd/e19798-01/821-1841/gkahq/index.html

r8xiu3jd

r8xiu3jd2#

import csv
import re
with open('m.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in spamreader:
        uid = row[0]
        name = row[1]
        mobile = row[2]
        email = row[3]
        if not re.match('^\d{12}$', mobile):
            print("Mobile not match")
            continue
        if not re.match('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$', email):
            print("Email not match")
            continue
    """
        Store into database
    """

也许可以试试这样的。我刚刚根据你当前的信息创建了一个regex,但是手机号码可以不同(现在是12位数字),电子邮件有时也可以不同。

相关问题