加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Advanced SQLite Usage in Python

发布时间:2020-12-12 20:04:39 所属栏目:百科 来源:网络整理
导读:Following the SQLite3 series,this post is about some advanced topics when we are working with the SQLite3 module. If you missed the first part,you can find ithere. Using SQLite's date and datetime Types Sometimes we need to insert and retr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> import sqlite3 fromdatetime date,datetime>>>db =sqlite3.connect(':memory:') c dbcursor()cexecute'''CREATE TABLE example(id INTEGER PRIMARY KEY,created_at DATE)''')>>># Insert a date object into the database today datetoday) '''INSERT INTO example(created_at) VALUES(?)''' (today))commit) >>># Retrieve the inserted object '''SELECT created_at FROM example''') rowfetchone) print'The date is {0} and the datatype is {1}'.format(row[0]type)# The date is 2013-04-14 and the datatype is <class 'str'> close)

The problem is that if you inserted a date object in the database,most of the time you are expecting a date object when you retrieve it,not a string object. This problem can be solved passingPARSE_DECLTYPESandPARSE_COLNAMESto theconnectmethod:

16 17 sqlite3 datetime>>>detect_types=.PARSE_DECLTYPES|.PARSE_COLNAMES)) )# Insert a date object into the database )) )>>> # Retrieve the inserted object) ))# The date is 2013-04-14 and the datatype is <class 'datetime.date'>)

Changing the connect method,the database now is returning a date object. Thesqlite3module uses the column's type to return the correct type of object. So,if we need to work with adatetimeobject,we must declare the column in the table as atimestamptype:

10 11 ) # Insert a datetime object nowdatetimenow) (now)) >>># Retrieve the inserted object )) )# The date is 2013-04-14 16:29:11.666274 and the datatype is <class 'datetime.datetime'>

In case you have declared a column type asDATE,but you need to work with a

8 c ) # We are going to insert a datetime object into a DATE column now ) c ) db ) # Retrieve the inserted object '''SELECT created_at as "created_at [timestamp]" FROM example''' )

Usingas "created_at [timestamp]"in the SQL query will make the adapter to parse the object correctly.

Insert Multiple Rows with SQLite's executemany

Sometimes we need to insert a sequence of objects in the database,51); white-space:nowrap">sqlite3module provides theexecutemanymethod to execute a SQL query against a sequence.

18 19 20 21 # Import the SQLite3 modulesqlite3db)c)c'''CREATE TABLE users(id INTEGER PRIMARY KEY,name TEXT,phone TEXT)''')users['John' '5557241' 'Adam''5547874' 'Jack''5484522' 'Monthy'' 6656565')]cexecutemany'''INSERT INTO users(name,phone) VALUES(?,?)''' users)db) # Print the usersc'''SELECT * FROM users''')for row in c:(row)db)

Please note that each element of the sequence must be a tuple.

Execute SQL File with SQLite's executescript

Theexecutemethod only allows you to execute a single SQL sentence. If you need to execute several different SQL sentences you should useexecutescriptmethod:

# Import the SQLite3 module sqlite3db) )scriptCREATE TABLE accounts(id INTEGER PRIMARY KEY,description TEXT); INSERT INTO users(name,phone) VALUES ('John','5557241'), ('Adam','5547874'),('Jack','5484522');''' executescript(script) # Print the resultsc) :)db)

If you need to read the script from a file:

4 fdopen'myscript.sql''r')script fdread)c)fd)

Please remember that it is a good idea to surround your code with atry/except/elseclause in order to catch the exceptions. To learn more about thetry/except/elsekeywords,checkout theCatching Python Exceptions – The try/except/else keywordsarticle.

Defining SQLite SQL Functions

Sometimes we need to use our own functions in a statement,specially when we are inserting data in order to accomplish some specific task. A good example of this is when we are storing passwords in the database and we need to encrypt those passwords:

14 15 sqlite3#Import the SQLite3 module hashlib defencrypt_password(password):# Do not use this algorithm in a real environmentencrypted_passhashlibsha1(passwordencode'utf-8'hexdigest)returnencrypted_passdb) # Register the functiondbcreate_function'encrypt' 1 encrypt_password) )c)user'johndoe@example.com''12345678')c'''INSERT INTO users(email,password) VALUES (?,encrypt(?))'''user)

Thecreate_functiontakes 3 parameters:name(the name used to call the function inside the statement),the number of parameters the function expects (1 parameter in this case) and a callable object (the function itself). To use our registered function,we called it usingencrypt()in the statement.

Finally,PLEASE use a true encryption algorithm when you are storing passwords!

via:http://www.pythoncentral.io/advanced-sqlite-usage-in-python/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

Following the SQLite3 series,this post is about some advanced topics when we are working with the SQLite3 module. If you missed the first part,you can find ithere.

Using SQLite's date and datetime Types

Sometimes we need to insert and retrieve somedateanddatetimetypes in our SQLite3 database. When you execute the insert query with a date or datetime object,thesqlite3module calls the default adapter and converts them to an ISO format. When you execute a query in order to retrieve those values,51); white-space:nowrap">sqlite3module is going to return a string object:

    推荐文章
      热点阅读