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

时间:2018-07-23 03:45:03

标签: mysql database

我正在使用文件上传查询将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] @ [某些域]的格式如果是手机号码所有字母应为整数。

2 个答案:

答案 0 :(得分:1)

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
    """

也许尝试这样的事情。我只是根据您当前的信息创建了一个正则表达式,但是手机号码可以不同(现在是12位数字),电子邮件有时也可以不同。

答案 1 :(得分:0)

您可以使用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

了解更多信息