0

如何通过 python 对我的 SQL3 数据库执行后处理?以下代码不起作用,但我想做的是首先创建一个新数据库(如果不存在),然后插入一些数据,最后执行查询并关闭连接。但是我要单独做什么,以便以后添加其他功能,例如删除/更新器/等...有什么想法吗?

class TitlesDB:
    # initiate global variables
    conn = None
    c = None
    # perform pre - processing
    def __init__(self, name):
        import os
        os.chdir('/../../')
        import sqlite3
        conn = sqlite3.connect(name)
        c = conn.cursor()
        c.execute('CREATE TABLE IF NOT EXISTS titles (title VARCHAR(100) UNIQUE)')
    # insert a bunch of new titles
    def InsertTitles(self, list):
        c.executemany('INSERT OR IGNORE INTO titles VALUES (?)', list)
    # perform post - processing
    def __fina__(self):
        conn.commit()
        conn.close()
4

2 回答 2

0

您可以创建一个上下文管理器来进行预处理和后处理。

import contextlib

@contextlib.contextmanager
def titles_cursor():
    # perform pre - processing
    conn = sqlite3.connect(name)
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS titles (title VARCHAR(100) UNIQUE)')

    yield c

    # perform post - processing
    conn.commit()
    conn.close()

with在声明中使用它:

with titles_cursor() as c:        
    c.executemany('INSERT OR IGNORE INTO titles VALUES (?)', list)
于 2013-09-13T10:00:38.027 回答
0

首先,避免在 sql 连接中使用 sql 连接不是更好__init__吗?如果你想在使用__fina__. 您可以在另一个方法中使用它并在需要时调用它并调用连接关闭方法,并在每个方法执行后提交。

这是我使用的:创建一个连接到数据库并从参数执行查询的类方法,提交并关闭连接,然后将要执行的任何查询作为该方法的参数传递。您可以随时调用此方法想。最好的一点是,您可以创建一个在关闭数据库连接之前将多个查询作为参数传递的方法。如果每次需要执行 sql 查询时都必须使用与另一个类中相同数据库的 sql 连接而不使用一组方法,这将特别有用。

这是我在 MySQLdb 模块中使用的一个小例子,它非常简单,但很有效。

import MySQLdb

class DbQuery:
    '''Here is the class I talked about'''
    def __init__(self):
        '''You can define the main queries here but it's not necessary
           They can be global variables
           If you don't have class dependency from which you get variables
           you might not even need to define __init__'''
    def Sql_Connect(self):
        self.db = MySQLdb.connect("localhost","root","","data_db" )
        self.cursor = db.cursor()
    def Sql_Commit(self):
        self.db.commit()
        print "Info : Database updated"
        except:
           self.db.rollback()
           print "Error : Database rollback"
        self.db.close()
    def Query(self,query):
        self.Sql_Connect()
        try :
            self.cursor.execute(query)
        self.Sql_Commit()

唯一重要的是记住查询结构。

于 2013-09-13T09:43:51.350 回答