用的数据库是mysql,第三方库是pymysql
对于数据库语言,创建数据表,用的是,这个语句(还可以自己再加点东西)
"""create table tablename (column_name column_type);"""
用python的第三方库pymysql,如果创建表,写sql语句。。。,如果这样,何必要用python,就先在终端或者某个地方创建表。
但是无论怎么用都是要执行sql语句,这点确实逃不掉。。。
我希望用python创建表的过程是写个表名,再简单的写数据类型,其他我不想写。然后就能创建表了。
1,列数是不确定的。
2,数据的类型是不缺定的。
不知道怎么说了
直接给出代码,看注释
def zidian(count):
# count作为数据类型选择参数
if count == 1:
b = {1: 'int not null primary key auto_increment'}
elif count == 0:
b = {0: 'int not null'}
else:
b = {
count: f'varchar({count}) not null'
}
return b[count]
def create_table(tablename, **kwargs):
#动态参数列表
a = len(kwargs)
key = []
#列表,存储列的名字
values = []
#列表,存储为选择数据类型提供参数
for i in kwargs.values():
values.append(i)
for i in kwargs.keys():
key.append(i)
#加到列表中
s = str()
#s是字符串
for i, t in zip(key, values):
#zip函数,一起遍历
a = (i, zidain(t))
# a是个元组
b = ' '.join(a)
#元组变成字符串,用空格隔开
b += ','
#b 加上逗号
s += b
#结束循环
s = s[:-1]
#去掉最后一个逗号
s = "(" + s + ")"
#加上括号
a = f"""create table if not exists {tablename}{s}default charset=utf8;"""
# 拼接sql语句
print(a)
#打印出来
比如来这样一段python代码
create_table('we',id=1,name=10,work=30)
# 结合上面的封装
# 这段代码执行的意思
’we‘ 表名
# id=1 id 就是列的名字,1 在zidian函数中进行替换1就变成了 int not null primary key auto_increment
# naeme=10,name就是列名,10进行了替换变成了varchar(10) not null
# work=30,也是一样的,30替换变成了varchar(30) not null
打印出来的sql语句长这样的
create table if not exists we(id int not null primary key auto_increment,name varchar(10) not null,work varchar(30) not null)default charset=utf8;
再写一个
create_table('we',id=1,name=10,work=30,age=0)
打印出来
create table if not exists we(id int not null primary key auto_increment,name varchar(10) not null,work varchar(30) not null,age int not null)default charset=utf8;
动态创建了。
可能看着很长,没有格式化,当然不好看,但是仔细看看,这段sql语句没有问题
可以执行。
结合pymysql,结合面向对象,再次进行封装
代码如下
def zidain(self,count):
if count == 1:
b = {1: 'int not null primary key auto_increment'}
elif count==0:
b={0:'int not null'}
else:
b = {
count: f'varchar({count}) not null'
}
return b[count]
#sql的数据类型,并没有完全封装,datatime之类的,但是这已经不是个问题了
def creat_table(self,tablename, **kwargs):
a = len(kwargs)
key = []
values = []
for i in kwargs.values():
values.append(i)
for i in kwargs.keys():
key.append(i)
s = str()
for i, t in zip(key, values):
a = (i, self.zidain(t))
b = ' '.join(a)
b += ','
s += b
s = s[:-1]
s = "(" + s + ")"
a = f"""create table if not exists {tablename}{s}default charset=utf8;"""
self.sql(a)
· #执行sql语句
return self
#返回对象本身,为了链式调用
from init import my_sql
#导包,my_sql就是封装的类
#封装pymysql的包
# 链式调用
my_sql().use_db('school').creat_table('wang',id=1,name=20,age=0,work=30).close()
这段代码的意思
初始化-使用school这个数据库--创建表--关闭
运行前
只有一个表
运行代码
创建成功,哈哈哈哈哈
查看表的结构
from init import my_sql
# def desc_tablename(self,tablename,show=False):
# ....
# return c,self
my_sql().use_db('school').desc_tablename('wang',True)[1].close()
# desc_tablename返回值有两个,一个是列表,另一个是self,对象本身
# 其中还封装了prettable,True表示展示,默认不展示False。
如图
耶✌✌✌✌✌✌✌