前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python操作sqlite3数据库完全代码

python操作sqlite3数据库完全代码

原创
作者头像
大师级码师
修改2021-11-02 13:35:42
4310
修改2021-11-02 13:35:42
举报
文章被收录于专栏:大师级码师大师级码师
代码语言:javascript
复制
# Name: pySnipnix.py
Author: pantuts
Email: pantuts@gmail.com
Description: Saving your snippets to sqlite3 database.
Agreement: You can use, modify, or redistribute this tool under
the terms of GNU General Public License (GPLv3).
This tool is for educational purposes only. Any damage you make will not affect the author.
first run: python pySnipnix.py
!/usr/bin/python
import argparse
import sqlite3
import re
import sys
important, create the file
fileN = open('database.db', 'a+')
def main():

# add all arguments needed
# for argument that need FILE use [ type=argparse.FileType('r') ]
parser = argparse.ArgumentParser(description=None, usage='python %(prog)s -h --help -f file -s search -a \'title\' \'code here\' -e id -d id -v --version')
parser.add_argument('-f', metavar='filename', type=argparse.FileType('r'), dest='filename', help='File for database')
parser.add_argument('-s', metavar='string', dest='search', help='Search for string in database')
parser.add_argument('-a', metavar='string', dest='add', nargs=2, help='Add snippet. You should use \'\' for long string')
parser.add_argument('-e', metavar='id', type=int, dest='edit', help='Edit snippet')
parser.add_argument('-d', metavar='id', type=int, dest='delete', help='Delete from database')
parser.add_argument('-S', dest='show', action='store_true', help='Show all records')
parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0', help='Print version')

# parse all arguments to 'args'
args = parser.parse_args()

# database connection
conn = sqlite3.connect('database.db')
cur = conn.cursor()

def createTable():
    cmd = 'CREATE TABLE IF NOT EXISTS snippets (id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR(50), code VARCHAR NOT NULL)'
    cur.execute(cmd)
    conn.commit()

def insertSnippets():
    # convert the string to lowercase and then execute
    lst = [args.add[0].lower() , args.add[1].lower()]
    cmd = 'INSERT INTO snippets VALUES (NULL, ?, ?)'
    cur.execute(cmd, lst)
    conn.commit()

    print('\nNew Snippet...')
    print('Snippet Title: \t%s' % args.add[0])
    print('Code: \t\t%s' % args.add[1])

def editSnippets():
    cur.execute('SELECT * FROM snippets where id=%s' % str(args.edit))
    res = cur.fetchone()
    if res is None:
        print('No record to edit!')
    else:
        resl = [result for result in res]
        print('Current title >> ' + resl[1])
        ed1 = input('Title (Leave black, same title): ')
        print('Current snippet >> ' + resl[2])
        ed2 = input('Code: ')
        if ed1 is '':
            ed1 = resl[1]
        cur.executemany('UPDATE snippets SET title=\'%s\', code=\'%s\' WHERE id=?' % (ed1.lower(), ed2.lower()), str(resl[0]))
        conn.commit()
        print('Done!\n')

def deleteSnippets():
    print('\nDeleting record with ID %s ...' % str(args.delete))

    # first find if record exists and return false if not found
    cur.execute('SELECT * FROM snippets where id=%s' % str(args.delete))
    res = cur.fetchone()
    if res is None:
        print('No record to delete!')
    else:
        cmd = 'DELETE FROM snippets where id=%s' % str(args.delete)
        cur.execute(cmd)
        conn.commit()
        print('Deleted!\n')

def showOrSearch(cmd):
    # creating conn.create_function explanation: 1st(string to be used inside SQL), 2nd(count of arguments), 3rd(the function created)
    def matchPattern(pattern, columnName):
        pat = re.compile(pattern)
        return pat.search(columnName) is not None
    conn.create_function('matchPattern', 2, matchPattern)

    if cmd == 2:
        cur.execute('SELECT * FROM snippets WHERE matchPattern(\'%s\', title)' % str(args.search.lower()))
    else:
        cmd = 1
        cur.execute('SELECT * FROM snippets')
    res = cur.fetchall()
    # create empty dict, process filter keys and values
    s = {'id':{}, 'title':{}, 'code':{}}
    print('\nRecords result...')
    for result in res:
        s['id'] = result[0]
        s['title'] = result[1]
        s['code'] = result[2]
        print('[%s]\t[ %s ]---------->[ %s ]\n' % (s['id'], s['title'], s['code']))

# invoke creation of table
createTable()

if len(sys.argv) < 1:
    parser.print_help()

# do filtering when -f 'filename' is correct
if args.filename is not None:

    if args.show:
        if args.add or args.delete or args.search or args.edit:
            print('\nYou can\'t use other options with -S option')
            exit()
        else:
            args.add = None
            args.delete = None
            args.search = None
            args.edit = None
            showOrSearch(1)

    elif args.edit:
        if args.add or args.delete or args.search:
            print('\nYou can\'t use other options with -e option')
            exit()
        else:
            args.search = None
            args.add = None
            args.delete = None
            editSnippets()

    else:
        if args.add is None and args.delete is None and args.search is None:
            print('\n!!!!!You need to specify addional arguments to process the database!!!!!\n')
            parser.print_help()

        if args.search:
            args.edit = None           
            showOrSearch(2)

        if args.add:
            args.edit = None
            args.search = None             
            insertSnippets()

        if args.delete:
            args.search = None
            args.edit = None
            deleteSnippets()


else:
    parser.print_help()

# close our connection to the database
conn.commit()
conn.close()   


def by():
    print('\n[Script by: pantuts]')
    print('[email: pantuts@gmail.com]')
if name=="main":
    main()

# close our file
fileN.close()</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档