【问题标题】:How to input A Table name using User_input in Mysql Using Python?如何使用 Python 在 Mysql 中使用 User_input 输入表名?
【发布时间】:2018-09-18 18:55:28
【问题描述】:

将数据输入数据库

import MySQLdb
import time
import datetime
import calendar
localtime = time.asctime(time.localtime(time.time()))
print "Local current time :", localtime

打开数据库连接

db = MySQLdb.connect("localhost","root","","attendence" )

使用 cursor() 方法准备一个游标对象

cursor = db.cursor()

输入主题

subject=raw_input("Enter Subject Name:")

如果表已经存在,则使用 execute() 方法删除表。

sql="DROP TABLE IF EXISTS %s"%(subject)
cursor.execute(sql)

按要求建表

sql1= """CREATE TABLE %s (Sl_No. INT(200),NAME CHAR(20))"""%(subject)
cursor.execute(sql)

从服务器断开

db.close()

【问题讨论】:

  • 这是不好的做法。您永远不应该接受原始输入并将其传递给任何 SQL 语句。准备好的语句应该有通过执行函数传入的值。
  • 但是,我如何创建自己选择的表??
  • 例如,您可以为表定义一个命名模式,一些静态部分和一些来自用户输入的动态部分。用户输入需要验证,例如它应该只允许字母和数字。然后将这两个部分组合起来形成实际的表名。通过这种方式,您可以极大地减少 SQL 注入攻击的漏洞,并在一定程度上混淆您的数据库实体的实际名称。尽管如此,做这样的事情并不是最好的主意。
  • 好的,我明白了这个问题。
  • 但是,我可以自己选择创建表吗??

标签: python mysql


【解决方案1】:

当然,你可以这样做。但不推荐。而且你的代码有一些错误,例如Sl_No. is invalid col name。 所以我稍微修改一下你的代码。

import MySQLdb
import time
import datetime
import calendar
localtime = time.asctime(time.localtime(time.time()))
print ("Local current time :", localtime)
db = MySQLdb.connect("localhost","root","","attendence" )
cursor = db.cursor()
subject = raw_input("Enter Subject Name:")
cursor.execute("show tables")
dele = "DROP TABLE IF EXISTS {tab}".format(tab=subject)
cre  = """CREATE TABLE {tab} (Sl_No INT(200),NAME CHAR(20))""".format(tab=subject)

def commit(sql):
    cursor.execute(sql)
    db.commit()

if subject.strip() in [tab[0] for tab in cursor.fetchall()]:
    commit(dele)
    commit(cre)
else:
    commit(cre)
db.close()

【讨论】:

    【解决方案2】:

    db = MySQLdb.connect("localhost","root","re​​verend","TESTDB" )

    【讨论】:

      猜你喜欢
      • 2023-01-23
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多