对于我正在做的业余爱好项目,我想写一个面向对象的python程序。但我遇到的第一个问题之一是为我的(MySQL)数据库创建一个类。
我正在尝试使用尽可能少的软件包,我想尝试仅使用pymysql来编写数据库类。问题是有大量的库和编写好的数据库类的缺乏解释在python中。
非常感谢任何建议和特别的例子
答案 0 :(得分:1)
当具有完全相同的情况时,我找到了mysql-connector-python类,我用它创建了一个小的“模型”来从其他类调用。这是一个显示各种数据库调用的简化版本。正如您所看到的,我有一个配置类,其中包含所有数据库身份验证信息等等。
foreach (Control c in this.Controls.OfType<System.Web.UI.WebControls.PlaceHolder>().ToList())
{
foreach (Control cc in c.Controls.OfType<System.Web.UI.HtmlControls.HtmlGenericControl>().ToList())
{
if (cc is System.Web.UI.HtmlControls.HtmlGenericControl)
{
System.Web.UI.HtmlControls.HtmlGenericControl iframe = cc as System.Web.UI.HtmlControls.HtmlGenericControl;
if (iframe.Attributes["src"].Contains("slideshare"))
{
Response.Write("INDEX:"+this.Controls.IndexOf(cc)); // returns -1
iframe.Attributes["src"] = "/img/content/cookielaw_slideshare.jpg";
Literal lit=new Literal();
lit.Text = @"<div class='cookieLaw_slideshare'><a id='cookieLaw_slideshare' href='#'><img src='/img/content/cookielaw_slideshare.jpg'/></a></div>";
Page.Controls.AddAt(this.Controls.IndexOf(cc),lit);
}
}
}
}
像这样打电话给班级:
# 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()
希望你能用它。
答案 1 :(得分:1)
import sqlite3
"""singleton class to deal with db"""
'''same can be use for pymysql just replace the sqlite3 with pymysql'''
class DBConnection:
instance = None
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(DBConnection)
return cls.instance
return cls.instance
def __init__(self, db_name='you-db-name'):
self.name = db_name
# connect takes url, dbname, user-id, password
self.conn = self.connect(db_name)
self.cursor = self.conn.cursor()
def connect(self):
try:
return sqlite3.connect(self.name)
except sqlite3.Error as e:
pass
def __del__(self):
self.cursor.close()
self.conn.close()
# write your function here for CRUD operations