阿杰学python----pymysql 动态表名

阿杰学python—pymysql 动态表名

import pymysql


def test():
    print('开始')
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root')
    cursor = conn.cursor()
    try:
        cursor.execute('drop database if exists mydb')
        cursor.execute('create  database if not exists mydb')
        # 使用mydb数据库
        cursor.execute('use mydb')
    except:
        print("建库失败")
        return 0
    try:
        table = 'mytable'
        sql_create_table = 'create table %s(cmx varchar(12), clover int)'
        cursor.execute(sql_create_table, table)
    except:
        print('建表失败1')

    # 注意这里的%s加了飘点,我习惯叫飘点(上倒引号)
    try:
        table = 'mytable'
        sql_create_table = 'create table `%s`(cmx varchar(12), clover int)'
        cursor.execute(sql_create_table, table)
    except:
        print('建表失败2')

    try:
        table = 'mytable'
        sql_select_table = 'select * from %s;'
        cursor.execute(sql_select_table, table)
    except:
        print('查表失败1')
    cursor.execute('show tables')
    # 查看并打印mydb里面所有表
    print(cursor.fetchall(),"\n#################################\n")

    try:
        table = 'mytable1'
        sql_creat_table = 'create table `%s`(cmx varchar(12), clover int);' % table
        cursor.execute(sql_creat_table)
    except:
        print('建表失败3')
    try:
        table = 'mytable1'
        sql_select_table = 'select * from  `%s`;'
        cursor.execute(sql_select_table, table)
    except:
        print('查表失败3')

    try:
        table = 'mytable1'
        sql_select_table = 'select * from  `%s`;' % table
        cursor.execute(sql_select_table)
    except:
        print('查表失败4')

# 查看并打印mydb里面所有表
    cursor.execute('show tables')
    print(cursor.fetchall())

    cursor.close()
    conn.close()
    print('结束')


if __name__ == '__main__':
    test()

开始
建表失败1
查表失败1
(("‘mytable’",),)
#################################

查表失败3
(("‘mytable’",), (‘mytable1’,))
结束

以下是mysql cmd下结果
mysql> show tables;
±---------------+
| Tables_in_mydb |
±---------------+
| ‘mytable’ |
| mytable |
±---------------+
2 rows in set (0.00 sec)

进程已结束,退出代码0

这里总结一下:
因为mysql中飘点(上倒引号) 里面的内容表示特殊字符,所以用飘点可以直接用%s占位后传参,如果不用飘点会导致因为table带引号致错,即使用了飘点如果用cursor.execute()传表名也会导致表名有引号,我们可以通过
cursor.execute("create table %s" %‘tablename’ + “(id int)”) 这样建出来的表就不会有引号了(注意:这里的cursor.execute("create table %s" %‘tablename’ + “(id int)”) 的%s外面是有飘点(上倒引号)的,但是CSDN好像没有显示出来)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值