2017-07-03 72 views
1

我试图通过python(2.7)获取与我的MySQL服务器相关的所有数据库的名称,但我只是获取数据库的数量。使用python获取MySQL数据库的列表

我环顾四周,似乎唯一的答案可能是使用sys进行命令行调用,获取数据库的名称,然后从那里继续,但我不敢相信这是唯一的方法。

目前代码:

import MySQLdb 

serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg") 

c = serv.cursor() 

print c.execute("SHOW DATABASES") 

输出:

4 

在此先感谢您的帮助。

+2

@执行''后执行'print c.fetchall()'# – khelwood

+1

@khelwood:非常好,谢谢!我显然是这样的一个小菜鸟。还添加了'l = c.fetchall(); l = [i [l] for i in l]'因为它返回的元组元组元组的元组元组中的第二个元素为null - 你知道这是为什么吗? – pshep123

+0

[相关](https://stackoverflow.com/questions/14551009/mysqldb-cursors-cursor-execute-returns-different-values-in-case-of-different-cur):execute返回行中的行数导致你的上下文。 – agtoever

回答

1

我不知道如果MySQL连接器是一样的资料库,但使用msyql连接你的答案是这样的:

import mysql.connector 
conn = mysql.connector.connect (user='user', password='password', 
           host='server_address',buffered=True) 
cursor = conn.cursor() 
databases = ("show databases") 
cursor.execute(databases) 
for (databases) in cursor: 
    print databases[0] 
0

只是把以前的评论和reorganicing: 目前代码:

import MySQLdb 
serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg") 
c = serv.cursor() 
print c.execute("SHOW DATABASES") 

随着建议的修改:

import MySQLdb 
serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg") 
c = serv.cursor() 
c.execute("SHOW DATABASES") 
l = c.fetchall() 
print l 
l = [ i[0] for i in l ] 
print l 

在我的情况下输出看起来象(这是所需的输出):

(('information_schema',), ('data',), ('mysql',), ('performance_schema',), ('sys',)) 
['information_schema', 'data', 'mysql', 'performance_schema', 'sys'] 

请注意以下常见的错误,以避免错误:如果您尝试c.execute("SHOW DATABASES").fetchall()你将有一个错误:AttributeError: 'int' object has no attribute 'fetchall' 。这就是你应该首先编写c.execute("SHOW DATABASES"),其次编写c.fetchall()

+0

如果您遇到错误,这表明您的代码不能回答问题并提供解决方案? – ADyson

+0

没错,它有效,最后几段是指出一个常见的错误。 (至少对我来说) –

+0

好的。我认为你可以澄清措辞或格式,以便更容易理解。 – ADyson