簡體   English   中英

從文本文件讀取查詢參數

[英]Reading query parameters from textfile

我想將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)‬

這條線也讓我頭疼。 我還沒有想出如何正確進行此查詢。

還有另一種方式:假設您有一個文本文件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)

使用序列化會更好,更方便:

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)

假設“ 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)‬

如果您希望文本文件格式正確且易於閱讀,則可以使用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)‬

parameters.txt包含

MyHost, MyUsername, MyPassword, MyDb

在腳本中:

host, user, passw, db = open('parameters.txt').read().split()
sql = MySQLdb.connect (host , user, passw, db)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM