2015. 2. 18. 01:38
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

#! -*- coding: utf-8 -*-

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 fatabase')
  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 VARVHAR(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=raw_input('Title (Leave black, same title): ')
      print('Current snippet >> ' + resl[2])
      ed2=raw_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))
    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']))

  createTable()

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

  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 additional 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()





'Python' 카테고리의 다른 글

getMac.py  (0) 2015.02.20
monotonicTIme.py  (0) 2015.02.18
readableSize.py  (0) 2015.02.18
estimateObject.py  (0) 2015.02.16
betterDIctionary.py  (0) 2015.02.15
Posted by af334