|
|
"""
|
|
|
数据库交互模块
|
|
|
凡是操作数据库的函数均写在该模块
|
|
|
"""
|
|
|
|
|
|
import sqlite3
|
|
|
|
|
|
|
|
|
|
|
|
# 构建一个名为conn的连接对象,实现python程序和SOLite数据库unman_vehicle.db之间的连接
|
|
|
conn = sqlite3.connect('turndb.db', check_same_thread=False)
|
|
|
# 创建游标对象,为了进一步操作
|
|
|
cur = conn.cursor()
|
|
|
# 外键默认是关闭,若要使用则要设置为打开
|
|
|
cur.execute("PRAGMA foreign_keys = ON")
|
|
|
|
|
|
|
|
|
# 返回数据库句柄,可以采用该句柄进行数据库操作
|
|
|
def get_cur():
|
|
|
return cur
|
|
|
|
|
|
|
|
|
# 构建数据表创建及文本数据导入函数
|
|
|
def create_table(tab_name, col_prop_list, txt_path, conn=conn, cur=cur):
|
|
|
# 以,为分隔符,将col_prop_list中的元素连接起来
|
|
|
col_name_props = ','.join(col_prop_list)
|
|
|
# 如果这个表不存在,就创建这个表,括号内是列名
|
|
|
cur.execute('CREATE TABLE IF NOT EXISTS %s( %s)' % (tab_name, col_name_props))
|
|
|
# 以只读的方式打开 txt_path,返回一个文件描述符
|
|
|
f = open(txt_path, 'r')
|
|
|
for x in f:
|
|
|
# 以,为分隔符分割x中的字符,并删除分割好字符右边的空白字符
|
|
|
x = x.rstrip().split(',')
|
|
|
# len(x)返回得到x的长度 ??
|
|
|
a = ["'%s'" % x[i] for i in range(len(x))]
|
|
|
# 以,为分隔符将a中的元素连起来
|
|
|
x = ','.join(a)
|
|
|
# 插入数据
|
|
|
cur.execute('INSERT INTO %s VALUES(%s)' % (tab_name, x))
|
|
|
f.close()
|
|
|
print('%s 创建成功' % tab_name)
|
|
|
print('%s 导入成功' % txt_path)
|
|
|
# 提交事物执行
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
# 构建数据表创建及文本数据导入函数
|
|
|
def create_table_without_data(tab_name, col_prop_list, conn=conn, cur=cur):
|
|
|
# 以,为分隔符,将col_prop_list中的元素连接起来
|
|
|
col_name_props = ','.join(col_prop_list)
|
|
|
# 如果这个表不存在,就创建这个表,括号内是列名
|
|
|
cur.execute('CREATE TABLE IF NOT EXISTS %s( %s)' % (tab_name, col_name_props))
|
|
|
print('%s 创建成功' % tab_name)
|
|
|
# 提交事物执行
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
# 构建数据表结构查询函数
|
|
|
def table_struct(tab_name, cur=cur):
|
|
|
cur.execute("PRAGMA table_info(%s)" % tab_name)
|
|
|
# 返回多个元组,如果没有就返回NOne
|
|
|
t_struct = cur.fetchall()
|
|
|
# 在返回的元组的遍历
|
|
|
for item in t_struct:
|
|
|
for x in item:
|
|
|
# 把 x 转换string
|
|
|
x = str(x)
|
|
|
# 多值打印是 以制表符为分割,为end添加一个空字符,不换行?
|
|
|
print(x, sep='\t', end=' ')
|
|
|
print()
|
|
|
|
|
|
|
|
|
# 构建数据表内容查询函数
|
|
|
def table_quer(tab_name='turndb', col_names='*', num_line=None, cur=cur):
|
|
|
cur.execute('select %s from %s where id=%s' % (col_names, tab_name, 1))
|
|
|
Li = cur.fetchall()
|
|
|
"""for line in Li[:num_line]:
|
|
|
for item in line:
|
|
|
print(item, sep='\t', end=' ')
|
|
|
print()"""
|
|
|
return Li
|
|
|
# 更新数据
|
|
|
def update(tab_name='fit_param_Qudong', col_names='*', num_line=None, cur=cur, x=None):
|
|
|
cur.execute('UPDATE %s SET %s = %s WHERE ID = %s' % (tab_name,col_names,x,1))
|
|
|
Li = cur.fetchall()
|
|
|
return Li
|
|
|
|
|
|
# 获取一定行数的数据
|
|
|
def table_quer_limit(tab_name, col_names='*', num_line=20, cur=cur):
|
|
|
sql = 'select %s from %s order by id desc limit 0,%s' % (col_names, tab_name, num_line)
|
|
|
cur.execute(sql)
|
|
|
Li = cur.fetchall()
|
|
|
return Li
|
|
|
|
|
|
|
|
|
# 添加一列,默认添加类型为float
|
|
|
def addcol(tab_name, col_name='*', conn=conn, cur=cur):
|
|
|
cur.execute("ALTER TABLE %s ADD COLUMN '%s' float" % (tab_name, col_name))
|
|
|
conn.commit()
|
|
|
# 更新数据
|
|
|
|
|
|
# 插入数据
|
|
|
def insert_data(tab_name, data):
|
|
|
cur.execute('INSERT INTO %s VALUES(%s)' % (tab_name, data))
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
# 清空表格 @tab_name 表格名称
|
|
|
def clear_table(tab_name):
|
|
|
cur.execute('delete from %s ' % tab_name)
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
# 关闭数据库句柄,要在整个程序运行结束的时候调用该方法
|
|
|
def close():
|
|
|
conn.close()
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
pass
|
|
|
tab_name_3 = 'turndb'
|
|
|
col_prop_list_3 = ['id','angle',]
|
|
|
create_table_without_data(tab_name_3, col_prop_list_3)
|