问题:如何在python中将功能更改为类

时间:2019-04-26 13:20:10

标签: python class methods

我想用方法创建一个类,这样我就不必创建多个函数。 下面是我的代码,我想使用两个方法获取一个类。方法1:SQL查询,方法2:SQL插入。

非常感谢任何小费。

Stefan

def dbconnect():
    dbconn = pymysql.connect(host='192.168.1.2', port=3307,  user='username', passwd='password', db='dbname')
    try:
        cur = dbconn.cursor()
        sqlQuery = "select * from data"
        sqlQuerygetlast = "SELECT * FROM data ORDER BY id DESC LIMIT 1"
        sqlQuerygetlast10 = "SELECT * FROM data ORDER BY id DESC LIMIT 10"
        cur.execute(sqlQuerygetlast10)
        rows = cur.fetchall()
        for row in rows:
            print(row)
    except Exception as e:
        print("Exeception occured:{}".format(e))
    finally:
        #dbconn.commit()
        dbconn.close()

我的目标是从代码中调用方法,即查询select语句。

非常感谢 斯蒂芬

2 个答案:

答案 0 :(得分:1)

我猜你的意思是你不想创建多个连接?

然后您应将其实现为Context manager

class DB:
    def __init__(self):
        self.dbconn = None

    def get_last(self, n)
        try:
            cur = self.dbconn.cursor()
            sqlQuerygetlast = "SELECT * FROM data ORDER BY id DESC LIMIT {}".format(n)
            cur.execute(sqlQuerygetlast)
            rows = cur.fetchall()
            for row in rows:
                print(row)
        except Exception as e:
            print("Exeception occured:{}".format(e))
        finally:
            # self.dbconn.commit()

    def some_other_method(self):
        self.dbconn.do_something()

    def __enter__(self):
        self.dbconn = pymysql.connect(
            host='192.168.1.2', 
            port=3307,  
            user='username', 
            passwd='password', 
            db='dbname'
        )
        return self

    def __exit__(self, exc_type, exc_value, exc_traceback):
        dbconn.close()
        return True

并按以下方式使用它:

with DB() as db:
    db.get_last(1)
    db.get_last(10)
    db.some_other_method()

这将仅创建一个数据库连接实例,并在完成后关闭。

答案 1 :(得分:0)

在Python中编写类非常简单。

这是一个如何编写经典Person类以及如何使用属性和方法的示例。

具体来说,演示文稿方法还利用了 name 属性。

在此示例中,您可以轻松继续并构建数据库类实现:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def presentation(self):
    print("Hello my name is " + self.name)

p1 = Person("John", 36)
p1.presentation()

请记住,在类的所有方法中,您都必须将保留关键字self作为参数(显然,还可能需要其他任何参数)。