2011-05-09 108 views
0

我想將文本文件中的mysql連接的參數存儲在文件中,但不知道,在「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)‬ 

這條線也讓我很頭疼。我還沒有想出如何正確使這個查詢....

+0

你有什麼理由在一個文本文件要他們? – MattH 2011-05-09 22:21:04

+0

@Matth我想通過git讓我的項目可用,並希望敏感數據保存在單獨的文件中,然後轉到.gitignore – birgit 2011-05-09 23:33:29

回答

0

它會更好,更舒適,爲您使用序列化:

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) 
0

假設「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

謝謝!這看起來不錯,簡單。 – birgit 2011-05-09 23:25:47

0

您可以使用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

其實我現在正在努力與我提出的線「sql =」從語法中獲取sql錯誤...並且還沒有找到正確的解決方案 – birgit 2011-05-09 23:26:47

1

還有一種方法:假設你有一個文本文件,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

MyHost, MyUsername, MyPassword, MyDb 

在腳本parameters.txt:

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