2016-05-24 6 views
0

ホビープロジェクトのために、私はオブジェクト指向のpythonプログラムを書いてみたいと思っています。最初に私が実行している問題の1つは、データベース。Pythonでデータベースクラスを書く

私は可能な限り少数のパッケージを使用しようとしており、pymysqlのみを使用してデータベースクラスを作成しようとしています。問題は、圧倒的な量のライブラリがあり、 Pythonのクラス。まったく同じ状況になるとき

任意の提案、特に例はあまり

+0

使用するデータベースを指定してください。 – dizballanze

+0

答えは分かりませんが、代わりに[sqlalchemy](http://www.sqlalchemy.org/)のような大きなORMを習得する方法を学んでください。あなた自身のXを書くことは、(時にはそうですが)練習するのに良い方法のようですが、最終的には重要なことを見逃したり、プロジェクトに飽きたりすることがあります。もしあなたがよく設計され、すでに存在している何かを試して理解している/マスターしていれば、あなたは今も考えていない非常に多くの縁の場合や複雑さに遭遇します。 –

+0

私は実際にピービーを試しましたが、あまり好きではありませんでしたが、sqlalchemyはより良い選択肢ですか? –

答えて

1

をいただければ幸い、私は他のクラスから呼び出すために、小さな「モデル」を作成したとのmysql-コネクタ - Pythonのクラスを発見しました。これは様々なdbコールを表示するカットダウンバージョンです。ご覧のとおり、すべてのdb認証情報などを保持するconfigクラスがあります。このようなクラスに応じ

# dependancy: mysql-connector-python (https://dev.mysql.com/downloads/connector/python/2.1.html) 
import mysql.connector 
import time 
import config 
import HTMLParser 
import StringIO 

html_parser = HTMLParser.HTMLParser() 

try: 
    connection = mysql.connector.connect(user=config.DB_USER, password=config.DB_PASSWORD, 
     host = config.DB_HOST, database=config.DB_DATABASE, unix_socket=config.UNIX_SOCKET) 

    cursor = connection.cursor() 

except mysql.connector.Error as err: 
    logger.log('Database connection failed for '+config.DB_USER+'@'+config.DB_HOST+'/'+config.DB_DATABASE) 
    exit() 

def get_bad_words(): 
    sql = ("SELECT word FROM word_blacklist") 
    results = execute(sql) 
    return results 

def get_moderation_method(): 
    sql = ("SELECT var_value FROM settings " 
    "WHERE var_key = %(key)s") 
    results = execute(sql, True, {'key':'moderation_method'}) 
    return results[0] 

def current_events(): 
    sql = ("SELECT count(id) FROM events WHERE event_date >= DATE_SUB(NOW(), INTERVAL 2 hour) AND event_date <= DATE_ADD(NOW(), INTERVAL 5 hour)") 
    results = execute(sql, True) 
    return results[0] 

def insert_social_post(channel, filter_type, post_id, validate, user_name, user_id, user_profile_picture, text, post_date, image_url, state): 
    try: 
     san_user_name = html_parser.unescape(user_name.encode('utf-8').strip()).decode("utf8").encode('ascii','ignore') 
    except: 
     san_user_name = html_parser.unescape(user_name.strip()) 
    try: 
     san_text = html_parser.unescape(text.encode('utf-8').strip()).decode("utf8").encode('ascii','ignore') 
    except: 
     san_text = html_parser.unescape(text.strip()) 

    insert_post = ("INSERT IGNORE INTO social_posts " 
     "(channel, filter_type, post_id, validate, user_name, user_id, user_profile_picture, text, post_date, image_url, state)" 
     "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)") 
    execute(insert_post, False, [channel, filter_type, str(post_id), validate, 
     san_user_name.strip(), user_id, user_profile_picture, san_text.strip(), post_date, image_url, state], True) 

def delete_posts(ids): 
    fmt = ','.join(['%s'] * len(ids)) 
    cursor.execute("DELETE FROM `social_posts` WHERE id IN (%s)" % fmt, 
        tuple(ids)) 
    connection.commit() 

def update_campaigns(campaigns): 
    sql = ("UPDATE social_campaigns " 
     "SET last_updated = NOW()" 
     "WHERE id IN ("+(','.join(str(c) for c in campaigns))+")") 
    execute(sql, False, None, True) 

def execute(tuple, single = False, args = {}, commit = False): 
    cursor.execute(tuple, args) 

    if commit == True: 
     connection.commit() 
    else: 
     if single == True: 
      return cursor.fetchone() 
     else: 
      return cursor.fetchall() 

def lastrowid(): 
    return cursor.lastrowid 

def close(): 
    connection.close() 

コール:

import db 
bad_words = db.get_bad_words() 

あなたがこれを使用することができます願っています。

関連する問題