2014-04-07 46 views
0

我想在Python执行此查询:无法在SQLITE3 Python的Django的插入数据库中的特定数据

cur=self.con.execute("insert into %s(url_id,url_name,url_title) values(%d,'%s','%s')" % (table,url_i,url_n,url_t)) 

在这里,我将URL ID,URL名称和URL标题中的列url_id,URL_NAME和url_title分别。 id和url被插入的很好,但不是url_title。 url_title列仅为空白。

如果我们,只是为了好玩,交换url_n和url_t的位置,然后问题仍然存在!我认为这个问题可能与url_title列本身有关,但这个小实验证明这个问题可能与url_t变量有关。

我们通过使用BeautifulSoup和Urllib2提取特定网页的实际url标题来获得url_t的值。这里的功能,如果你有兴趣:

def title(self,soup): 
    url_title=soup.title.string 
    return url_title 

这将返回我要在数据库中插入链接标题。

我使用Django模型创建了我们打算插入值的表格。这里是models.py文件:

class url_list(models.Model): 
    url_id=models.IntegerField()    
    url_name=models.CharField(max_length=200)  
    url_title=models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.url_name 

那么,我在做什么错了?

+0

你解析了什么html(提供链接或相关的html代码)?另外,在execute()调用之前检查table,url_i,url_n,url_t变量的值。 – alecxe

+0

这是一个我自己创建的简单的静态HTML文档。我有一组这样的文档,他们各自的url和url标题应该存储在Db中,这不会发生。我检查了所有的值,他们似乎是正确的,但它没有被插入。这就是问题所在。 – user3504239

+1

为什么插入原始SQL而不是使用模型层? –

回答

0

我找到了解决办法。如果你正在使用Django,请参阅布尔汗哈立德简单的解决方案,解决了一切:

from yourapp.models import url_list 

new_url = url_list(url_id=url_i, url_name=url_n, url_title=url_t) 
new_url.save() 

但是,如果你没有在模型或Django的(或两者)工作,涉及到一个普通表,让我提醒你注意url_t变量既不是字符串也不是unicode变量。当我这样做:

type(url_t) 

我url_t的类型和它返回:

<class 'bs4.something'> 

这是我们不想要的。

我们希望:

<type 'unicode'> 

要将其转换为Unicode,只要做到以下几点:

unicode(url_t) 

即使将其转换为Unicode后,我发现问题依然存在。然后,通过几个实验,我做了以下工作:

url_t=str(url_t) 
url_t=url_t[1:] 

Voila。问题解决了。

1

相反光标和原始SQL搞乱的,使用数据库API:

from yourapp.models import url_list 

new_url = url_list(url_id=url_i, url_name=url_n, url_title=url_t) 
new_url.save() 
+0

这可能是正确的,但现在的问题是我无法导入模型!它给'没有找到名为XYZ的模块' – user3504239

+0

向我们显示您的进口报表。你是否试图在你的views.py中导入它们? –

+0

不,我不是。我试图在一个普通的python文件中导入模型。 – user3504239

相关问题