Чтение параметров запроса из текстового файла - PullRequest
0 голосов
/ 10 мая 2011

Я хочу сохранить параметры для mysql-connect в текстовом файле, но не знаю, какой может быть самый элегантный способ сохранить их в «query.txt» Команда readline (), казалось бы, была опцией, но каким-то образом делает ее очень не элегантной. Может кто-нибудь предложить гладкое решение? спасибо!

open("query.txt")
??? read parameters host, user, pass, db from query.txt ???
???sql = MySQLdb.connect (host = "%s", user = "%s", passwd = "%s", db = "s%"), host, user, pass, db)‬

Эта строка также вызывает у меня головную боль. Я еще не понял, как правильно сделать этот запрос ....

Ответы [ 5 ]

1 голос
/ 11 мая 2011

Еще один способ: допустим, у вас есть текстовый файл params.txt, который содержит литерал словаря в стиле Python, в котором есть ваши параметры. Это может выглядеть так:

# my cool SQL parameters
{ "user":   "lilu",
  "passwd": "multipass",
  "host":   "woo.foo.baz",
  "db":     "human-resources" }

Вы можете использовать безопасный и стандартный синтаксический анализатор литералов Python ast.literal_eval, чтобы преобразовать содержимое этого файла в объект словаря, который затем можно передать в функцию подключения SQL.

import ast

defaults = dict(host='default-host-name', user='default-user-name')

# "U" mode is used so that no matter what newline styles you have in the file,
# they all become \n in memory.
with open('params.txt', 'rU') as params_fo:
    params = dict(defaults)
    params.update(ast.literal_eval(params_fo.read()))
    sql = MySQLdb.connect(**params)
0 голосов
/ 14 мая 2011

parameters.txt, содержащий

MyHost, MyUsername, MyPassword, MyDb

В сценарии:

host, user, passw, db = open('parameters.txt').read().split()
sql = MySQLdb.connect (host , user, passw, db)
0 голосов
/ 10 мая 2011

Предполагая, что «query.txt» содержит:

hostname username password db  

Вы можете сделать:

host, user, pass, db = open('query.txt').read().split()
sql = MySQLdb.connect (host = "%s", user = "%s", passwd = "%s", db = "s%"), host, user, pass, db)‬
0 голосов
/ 10 мая 2011

Вы можете использовать JSON, если вы хотите, чтобы текстовый файл был хорошо отформатирован и легко читался:

# Query parameters class
class QueryParams:
    def __init__(self, paramsDict):
        self.__dict__.update(paramsDict)

# Read text file
q = json.load(open('query.txt'), object_hook = lambda dc: QueryParams(dc))

# Use params
sql = MySQLdb.connect (host = "%s", user = "%s", passwd = "%s", db = "s%"), q.host, q.user, q.pass, q.db)‬
0 голосов
/ 10 мая 2011

Будет лучше и удобнее использовать сериализацию:

import cPickle

with open('pickler file.pic','w') as f:
    host, user, passw, db = 'bouloudou','bididi',198754,'the_db'
    cPickle.dump([host, user, passw, db],f)



with open('pickler file.pic','r') as f:
    host, user, passw, db = cPickle.load(f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...