2014-09-07 2 views
0

mise à jour; donc le genre et les réponses utiles de deux grands utilisateurs ici, je ne les suivantesComment me connecter à une base de données MySQL en Python de la bonne manière?

bonjour cher Bryn merci beaucoup j'effaça la db CPAN et runned à nouveau le programme, voir les résultats:

[email protected]:~/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 

bien c'est un peu difficile - pourquoi puis-je obtenir ces résultats !! `

ici l'original affichant

assez nouveau pour python et à la programmation aussi?. J'essaie de me connecter à une base de données MySQL sur RDS d'Amazon en utilisant peewee et je n'arrive pas à le faire fonctionner. Je suis nouveau dans les bases de données donc je fais probablement quelque chose de stupide, mais c'est ce que j'essaie: bien j'ai essayé d'obtenir une connexion à une base de données en python avec peewee mais à un certain moment le programme échoue.

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() 

i rapportiez les résultats suivants

[email protected]:~/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")                              
[email protected]:~/perl> 

si vous pouvez me aider je serais très heureux e! Merci pour toute aide

salutations

+1

bien, d'abord je devrais dire que je ne sais rien à propos de «peewee». Mais ce message 'peewee.OperationalError: (1050," Utilisateur 'Table' existe déjà ")' semble être le coeur de votre problème: vous créez inconditionnellement la table avec 'User.create_table()' alors que vous devriez vérifier si il existe et essaie de le créer seulement s'il ne le fait pas. – isedev

+0

bonjour cher isedev. tout d'abord merci beaucoup pour les conseils. Je ferai les vérifications et jetterai un coup d'oeil plus étroit à la table déjà excisting dans le DB. devinez que je dois effacer quelque chose par exemple des tables à la DB - afin de le faire fonctionner ... – user3730786

+0

bonjour j'ai posté une mise à jour - voir le haut de l'affichage original. J'aimerais avoir de vos nouvelles. Je pense que nous sommes très très proches – user3730786

Répondre

1

On dirait qu'il se connecte à votre base de données correctement, mais échoue parce que la ligne:

User.create_table() #ensure table is created 

tente de créer une table échoue car une table existe déjà, d'où le message d'erreur:

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

Essayer de commenter it out:

#User.create_table() 
+0

bonjour cher bryn beaucoup merci j'ai effacé le db cpan et exécuté le programme à nouveau voir les résultats: 'martin @ linux-70ce: ~/perl> python cpan_100.py Traceback (appel le plus récent dernier): Fichier "cpan_100.py", ligne 45, dans utilisateur = User.create (name = entry ["nom"], cname = entry ["cname"], TypeError: les index de chaîne doivent être des entiers, pas str ' – user3730786

+0

bonjour j'ai posté une mise à jour - voir le haut de l'affichage original .j'aimerais vous entendre .je pense que nous sommes très très proches – user3730786

Questions connexes