Python-基础知识学习之数据库连接、读取、写入、关闭(sqlite3)

import sqlite3 as sq3
import pandas as pd

conn = sq3.connect("thisadatabase.db") #连接数据库

# def select2table(table):
#     sql = (
#         f'''
#             select id, name, age, sex 
#             from {table}
#         '''
#     ) #需要执行的 sql 语句,在这里你需要拼接好 sql 语句,格式和 sqlite studio 里面的一样
#     cur = conn.execute(sql)  #调用
#     var = cur.fetchall()
#     cur.close()
#     return var

sql = (
    f'''
        select id, name, age, sex 
        from person
    '''
) #需要执行的 sql 语句,在这里你需要拼接好 sql 语句,格式和 sqlite studio 里面的一样

cur = conn.execute(sql)  #执行 sql 语句,返回一个句柄,用来获取从数据库拉取的数据

getAll = False #是否获取全部内容,根据需要设定

if getAll:
    var = cur.fetchall() #将所有结果拿出来,是一个数组,每一条包含每行的数据
    print(var[0]) #打印第一条
else:
    var = cur.fetchone() #将第一条拿出来,移动句柄到第二条
    print(var) #这里会打印出第一条数据
    var = cur.fetchone() #再获取一条数据
    print(var) #这里打印出第二条数据

cur.close() #关闭句柄
conn.close() #关闭数据连接

另外,关于数据库日期时间格式的写入,可以很方便就能实现,只要是打开数据的时候设置一个参数,然后可以自动加 date 和 timestamp 转化成数据库可识别的数据类型:

import pandas as pd
import time
import datetime
import sqlite3 as sq3
import random

#连接数据库,没有会创建一个
conn = sq3.connect('hello.db', detect_types=sq3.PARSE_DECLTYPES) #这里设置 detect_types 之后,可以直接将 date 类型的数据传递进去,它会自动解析

#获取随机的时间戳
def get_random_timestamp():
    a1 = (2019, 5, 1, 0, 0, 0, 0, 0, 0) #设置开始日期元组
    a2 = (2019, 5, 31, 23, 59, 59, 0, 0, 0) #设置结束日期元组
    start = time.mktime(a1) #生成开始时间戳
    end = time.mktime(a2) #生成结束时间戳
    t = random.randint(start, end) #在开始和结束时间戳中随机取出一个
    # date_touple = time.localtime(t) #将时间戳生成时间元组
    # date = time.strftime('%Y/%m/%d', date_touple) #将时间元组转成格式化字符串
    # return date
    return t

#创建表
sql = (
    f'''
    create table if not exists testtime(time0 DATE, time1 DATETIME, time2 TIME, time3 REAL, time4 timestamp)
    '''
)
conn.execute(sql)
conn.commit()

#随机生成时间,将每个格式插入到创建的表格中去
for i in range(10):
    timestamp = get_random_timestamp()
    dt = datetime.datetime.fromtimestamp(timestamp)
    # print(dt.date().strftime('%Y-%m-%d'))
    # print(dt.strftime('%Y-%m-%d %H:%M:%S'))
    # print(dt.time().strftime('%H:%M:%S'))
    # sql = ( #插入时间格式的数据时,需要用单引号括起来,实际上它也是 text 的格式
    #     f'''
    #     insert into testtime (time0, time1, time2, time3)
    #     values('{dt.date().strftime('%Y-%m-%d')}', '{dt.strftime('%Y-%m-%d %H:%M:%S')}', '{dt.time().strftime('%H:%M:%S')}', {timestamp})
    #     '''
    # )

    #这里的 time0 是 date 类型, time1 是 datetime 类型, time2 是 time 类型, time3 是 python 这边的时间戳(浮点类型), time4 是 timestamp 类型
    sql = (
        f'''
        insert into testtime (time0, time1, time2, time3, time4) 
        values('{dt.date()}', '{dt}', '{dt.time()}', {timestamp}, '{dt}')
        '''
    )
    conn.execute(sql)
conn.commit()



conn.close()

然后读取的时候,可以看看他们的格式:

import pandas as pd
import time
import datetime
import sqlite3 as sq3
import random

#连接数据库,没有会创建一个
conn = sq3.connect('hello.db', detect_types=sq3.PARSE_DECLTYPES)

sql = (
    f'''
    select * from testtime
    '''
)
cur = conn.execute(sql)
a = cur.fetchone()
for i in a:
    print(i, type(i))

cur.close()
conn.close()

#打印
    2019-05-19 <class 'datetime.date'>
    2019-05-19 16:37:14 <class 'str'>
    16:37:14 <class 'str'>
    1558255034.0 <class 'float'>
    2019-05-19 16:37:14 <class 'datetime.datetime'>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值