2016-03-28 54 views
0

的数据是否为请求获取随机用户并将其添加到我的数据库进行测试。 不幸的是,其中一些数据不是英文的。检查包含a-z或A-Z

例子。

enter image description here

导致错误数据,并打破我的表,我正在呈现。

enter image description here


我想

检查API的数据,看看,这是一个英文字符。 如果是,请将其插入数据库,否则,退出系统。

if firstname.isalpha(): 
    cur.execute(sql,args) 
else: 
    sys.exit() 

但由于某些原因,它仍然插入:(

任何提示/在这个问题上的建议将意味着很多,我。


#!/usr/bin/python 
import MySQLdb 
import random 
import requests 
import time 
import sys 
import datetime 

from random import randrange 
from datetime import timedelta 
from time import gmtime, strftime 

def random_date(start, end): 
    """ 
    This function will return a random datetime between two datetime 
    objects. 
    """ 
    delta = end - start 
    int_delta = (delta.days * 24 * 60 * 60) + delta.seconds 
    random_second = randrange(int_delta) 
    return start + timedelta(seconds=random_second) 

d1 = datetime.datetime.strptime('2016-03-27 11:16:32', '%Y-%m-%d %H:%M:%S') 
d2 = datetime.datetime.strptime(strftime('%Y-%m-%d %H:%M:%S', gmtime()), '%Y-%m-%d %H:%M:%S') 
print strftime("%m/%d/%Y %I:%M %p", gmtime()) 


db = MySQLdb.connect(host="localhost", # your host, usually localhost 
        user="root",   # your username 
        passwd="*********", # your password 
        db="db-local")  # name of the data base 

# you must create a Cursor object. It will let 
# you execute all the queries you need 
cur = db.cursor() 

# The first line is defined for specified vendor 
mac = [ 0x00, 0x24, 0x81, 
    random.randint(0x00, 0x7f), 
    random.randint(0x00, 0xff), 
    random.randint(0x00, 0xff) ] 

device_mac = ':'.join(map(lambda x: "%02x" % x, mac)) 
device_mac = device_mac.replace(":","").upper() 


cpe_mac = '000D6766F2F6' 

url = "https://randomuser.me/api/" 
data = requests.get(url).json() 
firstname = data['results'][0]['user']['name']['first'] 
lastname = data['results'][0]['user']['name']['last'] 
email = data['results'][0]['user']['email'] 
gender = data['results'][0]['user']['gender'] 


age_range_options = ["<15", "15-25", "25-40","40+"] 
age_range = random.choice(age_range_options) 

ip = ".".join(map(str, (random.randint(0, 255) 
    for _ in range(4)))) 

host_name = 'crontab' 
os = 'iPhone OS 9.0' 
visit_count = 1 

rand_date = random_date(d1, d2); 

created_at = time.strftime('%Y-%m-%d %H:%M:%S') 
updated_at = time.strftime('%Y-%m-%d %H:%M:%S') 

sql = ('''INSERT INTO visitors (device_mac,cpe_mac,firstname, lastname, email, gender, age_range,ip,host_name,os,visit_count,created_at, updated_at) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''') 

args = (device_mac,cpe_mac, firstname, lastname, email, gender, age_range,ip, host_name,os,visit_count, created_at, updated_at) 

if firstname.isalpha(): 
    cur.execute(sql,args) 
else: 
    sys.exit() 

db.commit() 
db.close() 
+0

将“prfzfndfj”视为合适的英语吗? – timgeb

+2

“_That导致数据错误_”。怎么会这样?它对我来说看起来像一个完全合法的名字。考虑修复你的图表,以便它们可以呈现任何类型的文本,而不是将输入限制为它当前可以呈现的文本类型。 – Kevin

+0

任何包含英文字母的东西。我会很高兴。 – ihue

回答

2

类似عالي阿尔法数字......只是在另一个阿尔法赌注:

>>> a = u"عالي" 
>>> a.isalpha() 
True 

事实上,如果你的整个堆栈处理Unicode正确,应该所有的工作。根据您上传的表格,唯一的问题是初始查找代码没有正确处理阿拉伯字符。


如果你想保持你的应用程序以西方为中心,而不是正确的国际化,你总是可以检查所有的信件是在拉丁字母:

valid = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 
def islatin(c): return c in valid 

注意这也将禁令类似éô ...有关更详尽的解决方案,请参阅this question

+0

这也不仅会保持英语(尽管我怀疑OP不希望这样),它会高兴地接受任何发生在仅使用[A-z]的语言中的单词。 –

相关问题