【问题标题】:How do I connect to a MySQL Database in Python the right way?如何以正确的方式在 Python 中连接到 MySQL 数据库?
【发布时间】:2014-09-07 16:44:21
【问题描述】:

更新;因此,对于两位优秀用户的友好和乐于助人的回复,我做了以下操作

你好亲爱的 bryn 非常感谢我删除了 db cpan 并再次运行程序查看结果:

martin@linux-70ce:~/perl> python cpan_100.py
Traceback (most recent call last):
  File "cpan_100.py", line 45, in <module>
    user = User.create(name=entry["name"], cname=entry["cname"],
TypeError: string indices must be integers, not str

这有点困难 - 为什么我会得到这些结果!!?`

这里是原帖

对 python 和编程也相当陌生。

我正在尝试使用 peewee 连接到 Amazon RDS 上的 MySQL 数据库,但无法正常工作。我是数据库新手,所以我可能在做一些愚蠢的事情,但这就是我正在尝试的:好吧,我尝试使用 peewee 连接到 python 中的数据库,但在某个时候程序失败了。

import urllib
import urlparse
import re
# import peewee
import json
from peewee import *
#from peewee import MySQLDatabase ('cpan', user='root',passwd='rimbaud') 
db = MySQLDatabase('cpan', user='root',passwd='rimbaud') 

class User(Model):
    name = TextField()
    cname = TextField()
    email = TextField()
    url = TextField()

    class Meta:
        database = db # this model uses the cpan database

User.create_table() #ensure table is created

url = "http://search.cpan.org/author/?W"
html = urllib.urlopen(url).read()
for lk, capname, name in re.findall('<a href="(/~.*?/)"><b>(.*?)</b></a><br/><small>(.*?)</small>', html):
    alk = urlparse.urljoin(url, lk)
    data = { 'url':alk, 'name':name, 'cname':capname }
    phtml = urllib.urlopen(alk).read()
    memail = re.search('<a href="mailto:(.*?)">', phtml)
    if memail:
        data['email'] = memail.group(1)

# data = json.load('email') #your json data file here
for entry in data: #assuming your data is an array of JSON objects
    user = User.create(name=entry["name"], cname=entry["cname"],
        email=entry["email"], url=entry["url"])
    user.save()

我得到以下结果

martin@linux-70ce:~/perl> python cpan_100.py
Traceback (most recent call last):
  File "cpan_100.py", line 27, in <module>
    User.create_table() #ensure table is created
  File "build/bdist.linux-i686/egg/peewee.py", line 3078, in create_table                                                                                                           
  File "build/bdist.linux-i686/egg/peewee.py", line 2471, in create_table                                                                                                           
  File "build/bdist.linux-i686/egg/peewee.py", line 2414, in execute_sql                                                                                                            
  File "build/bdist.linux-i686/egg/peewee.py", line 2283, in __exit__                                                                                                               
  File "build/bdist.linux-i686/egg/peewee.py", line 2406, in execute_sql                                                                                                            
  File "/usr/lib/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute                                                                                                  
    self.errorhandler(self, exc, value)                                                                                                                                             
  File "/usr/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler                                                                                   
    raise errorclass, errorvalue                                                                                                                                                    
peewee.OperationalError: (1050, "Table 'user' already exists")                                                                                                                      
martin@linux-70ce:~/perl>

如果你能帮助我,我会很高兴!感谢您的任何帮助

问候

【问题讨论】:

  • 好吧,首先我应该说我对peewee一无所知。但是这条消息peewee.OperationalError: (1050, "Table 'user' already exists") 似乎是您问题的核心:您无条件地使用User.create_table() 创建表,而您应该检查它是否存在并仅在不存在时才尝试创建它。
  • 你好亲爱的isedev。首先非常感谢您的提示。我将进行检查,并仔细查看数据库中已经存在的表。猜想我必须删除一些东西,例如数据库中的表 - 为了让它运行......
  • 您好,我发布了更新 - 请参阅原始帖子的顶部。我很想听听你的意见。我认为我们非常接近

标签: python mysql database peewee


【解决方案1】:

看起来它正确连接到您的数据库,但由于以下行而失败:

User.create_table() #ensure table is created

尝试创建表然后失败,因为表已经存在,因此错误消息:

peewee.OperationalError: (1050, "Table 'user' already exists") 

尝试将其注释掉:

#User.create_table()

【讨论】:

  • 你好亲爱的 bryn 非常感谢我删除了 db cpan 并再次运行程序查看结果:martin@linux-70ce:~/perl&gt; python cpan_100.py Traceback (most recent call last): File "cpan_100.py", line 45, in &lt;module&gt; user = User.create(name=entry["name"], cname=entry["cname"], TypeError: string indices must be integers, not str
  • 您好,我发布了更新 - 请参阅原始帖子的顶部。我很想听听你的意见。我认为我们非常接近
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多