我知道有相同标题的问题已经被问过,但我无法根据给出的解决方案找出问题所在。我正在使用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
这是堆栈跟踪:
文件“test_arg_parsing.py”,第59行,in main()文件“test_arg_parsing.py”,第14行,在main中 query_result = get_name_and_id(args.user,args.password,args.host,args.database)文件“test_arg_parsing.py”,第32行,in get_enqueuer_data con = mysql.connector.connect(用户,密码,主机,数据库)文件“/Library/Python/2.7/site-packages/mysql/connector/init.py”, 第179行,在连接中 返回MySQLConnection(* args,** kwargs)文件“/Library/Python/2.7/site-packages/mysql/connector/connection.py”, 第57行,在 init 中 super(MySQLConnection,self)。 init (* args,** kwargs)TypeError: init ()只取1个参数(给定5个)
我在这里不明白的是它是否抱怨MySQLConnection init 功能?或者我没有运行正确的命令?我已经使用mysql连接器成功连接到同一个数据库。但是我想现在将凭证作为参数传递。这里出了什么问题?
答案 0 :(得分:2)
这些必须是关键字参数。尝试:
con = mysql.connector.connect(user=user, password=password, host=host, database=database)
答案 1 :(得分:1)
首先,get_name_and_id
函数应该接受连接参数:
def get_name_and_id(user, password, host, database):
然后,根据connect()
function definition,您需要指定关键字参数:
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)