我需要有关使用python mysql数据库对象的建议

时间:2017-03-05 18:50:59

标签: python mysql

正如标题所述,我需要一些Python和MySQL的帮助。我目前正在进一步学习Python,我正在努力将Python和MySQL用于数据库设计,开发,管理和应用程序。

我熟悉MySQL并且熟悉Python。目前我正在开发面向对象的编程,我正在尝试在数据库类中建立数据库连接,然后使用该类创建,更新,删除和读取数据。

我创建了一个新的Python对象:

import pymysql as MySQL

class Database(object):
    Host = "127.0.0.1"
    Database = "****"
    user = "****"
    password = "****"

@staticmethod
def initialize():
    currentdb = MySQL.connect(Database.Host, Database.user, Database.password, Database.Database)
    cursor = currentdb.cursor()

@staticmethod
def insert(Table, DataDict):
    placeholders = ", ".join(["%s"] * len(DataDict))
    columns = ", ".join(DataDict.keys())
    sql = "INSERT INTO %s (%s) VALUES (%s)"%(Table, columns, placeholders)
    cursor.execute(sql, DataDict.values())

我想知道,如何使用对象内的光标?我不知道我目前的方法是否接近应该如何处理,我真的不确定。

可以用这种方式初始化游标,然后在我打算在上面的提取中进一步使用对象吗?

任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:0)

使用游标的正确方法是这样的:

import contextlib

def doSomething():
   with contextlib.closing(database.cursor()) as cursor:
     cursor.execute(...)
   # At the end of the `with` statement, cursor is closed

不要将光标打开太长时间。保持连接打开很长一段时间,就像你一样,很好。另外,请阅读交易控制。

如果您执行的操作不仅仅是少数数据库操作,请考虑使用SQLAlchemyPony ORM等库。

答案 1 :(得分:0)

import contextlib

def doSomething():
   with contextlib.closing(database.cursor()) as cursor:
     cursor.execute(...)

db SQLAlchemy或Pony ORM的库。

答案 2 :(得分:0)

查看以下代码。我将initialize()中的内容添加到标准的python类 init 方法中,并使用不同类型的参数初始化数据库:

import pymysql as MySQL

class Database(object):

  def __init__(self, host, db, user, pw):
      self.currentdb = MySQL.connect(Database.host, user, pw, db)

  def insert(self, Table, DataDict):
      placeholders = ", ".join(["%s"] * len(DataDict))
      columns = ", ".join(DataDict.keys())
      sql = "INSERT INTO %s (%s) VALUES (%s)"%(Table, columns, placeholders)

      with self.currentdb.cursor() as db_cursor:
         db_cursor.execute(sql, DataDict.values())  

一旦你在这里,你就可以如下初始化Database对象并插入数据:

my_db = Database(host="127.0.0.1", user="****", pw="****", db="****")
my_db.insert('table_name', data_dict)

请注意,我还没有更改您的代码,只根据您的初始帖子提供可能有效的组织。

答案 3 :(得分:0)

您是否考虑过使用SQLAlchemy?这为您提供了Python类和MySQL(或任何其他RDBMS)表之间的映射。我最近一直在一个相当沉重的现实项目中使用它,它似乎做得相当好,并且很容易学习。