我知道有人问过相同标题的问题,但根据给出的解决方案我无法解决问题。 我正在使用argparser连接到数据库并获取数据。 这里
import os
import logging
import argparse
import mysql.connector
def main():
parser = create_parser()
args = parser.parse_args()
query_result = get_name_and_id(args.user, args.password, args.host, args.database)
def create_parser():
parser = argparse.ArgumentParser(description="Require database credentials")
parser.add_argument("--host", required="True", metavar="[host]", dest='host', help="Database host")
parser.add_argument("--database-name", required="True", metavar="[database]", dest='database', help="Name of the database to connect to.")
parser.add_argument("--user-name", metavar="[user]", dest='user', required="True")
parser.add_argument("--password", required="True", metavar="[password]", dest='password')
return parser
def get_name_and_id(user,password,host,database):
con = mysql.connector.connect(user, password, host, database)
cursor = con.cursor()
query = ("SELECT id, name FROM some_table")
cursor.execute(query)
name_id_list = dict()
for id, name in cursor:
name_id_list[id] = name
return name_id_list
if __name__ =="__main__":
main()
要运行此程序,我使用命令
python test_database.py --host somehost --database somedb --user-name myuser-name --password my password
和这是stacktrace:
File"test_arg_parsing.py", line 59, in
main() File"test_arg_parsing.py", line 14, in main
query_result = get_name_and_id(args.user, args.password, args.host, args.database) File"test_arg_parsing.py", line 32, in
get_enqueuer_data
con = mysql.connector.connect(user, password, host, database) File"/Library/Python/2.7/site-packages/mysql/connector/init.py",
line 179, in connect
return MySQLConnection(*args, **kwargs) File"/Library/Python/2.7/site-packages/mysql/connector/connection.py",
line 57, in init
super(MySQLConnection, self).init(*args, **kwargs) TypeError: init() takes exactly 1 argument (5 given)
我在这里不明白的是,它是否在抱怨MySQLConnection的初始化函数? 还是我执行的命令不正确? 我已经使用mysql连接器成功连接到了相同的数据库。 但是我现在想将凭据作为参数传递。 这是怎么了?
这些必须是关键字参数。 尝试:
con = mysql.connector.connect(user=user, password=password, host=host, database=database)
是的 这就是我所缺少的。 谢谢。
首先,get_name_and_id函数应接受连接参数:
def get_name_and_id(user, password, host, database):
然后,根据connect()函数定义,您需要指定关键字参数:
def get_name_and_id(user, password, host, database):
con = mysql.connector.connect(user=user, password=password, host=host, database=database)
或者,您可以传递任意关键字参数:
def get_name_and_id(**kwargs):
con = mysql.connector.connect(**kwargs)
# ...
用法:
def main():
parser = create_parser()
args = parser.parse_args()
query_result = get_name_and_id(user=args.user,
password=args.password,
host=args.host,
database=args.database)
我不好,我在发布问题时错过了函数的参数。 病态更新。
我不敢相信我是这样的粗心。 谢谢亚历克斯
@ user3527975我实际上发现此mysql连接器连接函数的行为令人困惑-为什么它们使它仅与关键字参数一起使用...谢谢。
在第二个选项中,您正在使用args.user,args.password。 Args对于main方法而言是局部的。
@ user3527975是的,已更新以使其更加清晰。