2012-01-20 5 views
5

Je souhaite me connecter à deux bases de données à l'aide de Python et, plus tard, utiliser des tables des deux bases de données. Comment puis-je faire ceci? Le code suivant est-il correct?Connexion à deux bases de données

con = mdb.connect(host=MY_HOST, user=MY_USER, passwd=MY_PASS, db1=MY_DB1, db2=MY_DB2) 
+1

Que voulez-vous dire par « tables d'utilisation des deux bases de données ». Voulez-vous les joindre dans une seule requête? Ce n'est pas possible. –

+0

@Tichodroma Oui, je veux joindre tableA à partir de database1 et tableB à partir de database2, les deux bases de données sont sur le même serveur. C'est possible? – manxing

+0

@manxing oui c'est. – greut

Répondre

13

Si vous ne spécifiez pas la base de données dans votre appel connect, vous pouvez écrire des requêtes sur plusieurs bases de données à la fois. Le documentation indique que db n'est pas requis.

db = _mysql.connect('localhost', 'user', 'passwd') 

puis

SELECT u.*, i.* FROM db1.users u LEFT JOIN db2.items i ON u.id = i.user_id 

Mais ça va ne fonctionnera que si les deux bases de données sont sur le même serveur.

+0

y at-il un avantage à le faire de cette façon par rapport à ma réponse? –

+2

une connexion vs deux connexions. – greut

+0

Pourquoi vaut-on mieux que deux? performance, mémoire, facilité d'utilisation ou juste ton bon goût? –

7

Il suffit de faire deux connexions séparées

con1 = mdb.connect (host=MY_HOST, user=MY_USER, passwd=MY_PASS, db1=MY_DB1) 
con2 = mdb.connect (host=MY_HOST2, user=MY_USER2, passwd=MY_PASS2, db2=MY_DB2) 

et de les utiliser de façon indépendante comme vous le feriez lors de l'utilisation d'une base de données.

Pour compléter la réponse: "Le code suivant est-il correct? ...". Non, cette syntaxe ne le fera pas.

0

Vous avez deux possibilités:

1) Prendre les données dans une trame de données de pandas géants et l'utiliser pour créer la table dans le deuxième serveur.

2) BCP sur les données de server1 et le charger dans le serveur deuxième

+0

Veuillez utiliser la bonne mise en forme. – SteveFest

Questions connexes