正如标题所述,我需要一些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())
我想知道,如何使用对象内的光标?我不知道我目前的方法是否接近应该如何处理,我真的不确定。
可以用这种方式初始化游标,然后在我打算在上面的提取中进一步使用对象吗?
任何帮助都将受到高度赞赏。
答案 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
不要将光标打开太长时间。保持连接打开很长一段时间,就像你一样,很好。另外,请阅读交易控制。
如果您执行的操作不仅仅是少数数据库操作,请考虑使用SQLAlchemy或Pony 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)表之间的映射。我最近一直在一个相当沉重的现实项目中使用它,它似乎做得相当好,并且很容易学习。