V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fyl00
V2EX  ›  Python

python 如何以一个变量名为表名创建一个table?

  •  
  •   fyl00 · 2013-09-17 20:23:31 +08:00 · 6912 次点击
    这是一个创建于 3866 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新人,想利用python抓取一些数据,存到mysql里。
    但是我通过以下这个模式无法创建table,报的错误是You have an error in your SQL syntax

    I=[A,B,C]
    for i in I:
    cur.execute("CREATE TABLE IF NOT EXISTS %s (num VARCHAR(25))",i)

    求懂的人告知怎么能成功创建一个表名为变量名的table~
    第 1 条附言  ·  2013-09-18 18:28:52 +08:00
    采用了2楼和7楼的方法,把i前面的逗号改成%就可以了。
    其实之前自己采用过这种方法,但是因为自己实际用的list 里面有中文字符,所以也报错了……
    13 条回复    1970-01-01 08:00:00 +08:00
    est
        1
    est  
       2013-09-17 20:31:59 +08:00
    试试吧%s改成 ?
    delo
        2
    delo  
       2013-09-17 21:01:11 +08:00   ❤️ 1
    把 execute参数里 i 前面的逗号改成%(不知道我理解对不对… )
    roricon
        3
    roricon  
       2013-09-17 21:05:55 +08:00
    cur.execute("""CREATE TABLE IF NOT EXISTS {0} (num VARCHAR(25))""".format(i))
    cloverstd
        4
    cloverstd  
       2013-09-17 22:24:25 +08:00
    %s 改为 ?
    或者 ,i 改为 % (i)
    msg7086
        5
    msg7086  
       2013-09-18 15:47:04 +08:00
    @est
    @delo
    @roricon
    @cloverstd
    同学们…… 以「变量名」为表名。

    简单查了一下,好像py里变量是不能反射出字符串的,只能反射类和对象的名字。
    delo
        6
    delo  
       2013-09-18 16:35:12 +08:00
    @msg7086 好吧,如果需要'A', 'B'这样的字符串的话,可以把I弄成dict吧。用key来标识…
    randal
        7
    randal  
       2013-09-18 17:00:11 +08:00   ❤️ 1
    mysqldb表名不能参数绑定, 需要改成cur.execute("CREATE TABLE IF NOT EXISTS %s (num VARCHAR(25))" % i)
    hjyoite
        8
    hjyoite  
       2013-09-18 17:49:21 +08:00
    我觉得7楼是对的。
    yeelone
        9
    yeelone  
       2013-09-18 17:57:55 +08:00
    7楼正解
    lambdaT
        10
    lambdaT  
       2013-09-18 23:58:56 +08:00
    for i in l :
    sqlStr='CREATE TABLE IF NOT EXISTS' +x ;;
    cur.execute(sqlStr)
    lambdaT
        11
    lambdaT  
       2013-09-19 00:01:43 +08:00
    变量不一致,改一下
    likuku
        12
    likuku  
       2013-09-19 00:24:45 +08:00
    嗯,字符串替代就是这样子的:

    print "this is test str: %s" % (test_str)
    est
        13
    est  
       2013-09-23 10:23:22 +08:00
    日。7楼说对了。

    SQL真是一坨屎。说到底还是拼字符串。万一表名里包含 ` ; ' 等特殊字符就happy了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4975 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:50 · PVG 11:50 · LAX 20:50 · JFK 23:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.