【发布时间】:2018-04-16 03:39:18
【问题描述】:
我在 Python 2.7 中使用 MySQLdb 模块和 MariaDB 数据库。我想知道如何在多个模块中使用数据库的正确方法。我有这个例子,我尝试将另一个函数中的元素插入数据库。我收到OperationalError: (1046, 'No database selected')
编辑:这是更正后的代码(1、2)。谢谢。知道我想要一个像这样的带有依赖注入的工作示例。
这是我要在其中处理数据库的模块。
# test.py
import MySQLdb
import traceback
import test2 as insert_module
from warnings import filterwarnings
# Ignore MySQL `table already exists` warnings
filterwarnings ('ignore', category = MySQLdb.Warning)
# Create database object to keep it open as global variable
class MyDB (object):
connection = None
cursor = None
# Open database connection
def connect (self):
self.connection = MySQLdb.connect ()
self.cursor = self.connection.cursor ()
def execute (self, sql, *args):
try:
self.cursor.execute (sql, *args)
self.connection.commit ()
except MySQLdb.Error, e:
print (traceback.format_exc())
self.connection.rollback ()
def query (self, sql, *args):
try:
self.execute (sql, *args)
# Reopen database connection
except ( AttributeError, MySQLdb.OperationalError ):
self.connect ()
self.execute (sql, *args)
def disconnect (self):
self.connection.close ()
db = MyDB ()
def createDatabase ():
db.query ("CREATE DATABASE IF NOT EXISTS Product")
db.query ("USE Product")
sql = """CREATE TABLE IF NOT EXISTS `ProductColor` (
`ProductID` VARCHAR(20) PRIMARY KEY,
`ColorID` VARCHAR(20)
)"""
db.query (sql)
def insertProductColor (*args):
sql = """INSERT INTO `ProductColor` VALUE (%s, %s)"""
db.query (sql, args)
def main ():
createDatabase ()
insert_module.processListOfProductColors ()
if __name__ == "__main__":
main ()
db.disconnect ()
这是我要从中插入产品的模块。
#test2.py
import test as db_module
def processListOfProductColors ():
db_module.insertProductColor ("cup", "blue")
【问题讨论】:
标签: python mysql database mariadb