阿杰学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好像没有显示出来)