【问题标题】:How can you use python variables in an sql search [duplicate]如何在 sql 搜索中使用 python 变量[重复]
【发布时间】:2015-11-16 22:29:06
【问题描述】:

对于我的程序,我需要将两个表链接在一起,我知道该怎么做。但是,我只需要选择某些字段,它们已经存储在 python 变量中。如何仅从包含该变量值的行中选择字段来执行 sql 搜索?

我正在使用 SQLite,目前我所能做的就是

sql1 = '''SELECT *
FROM Dogs INNER JOIN Owners
ON Dogs.DogID = Owners.DogID
Order By Speed desc;
'''

我需要能够使用变量

【问题讨论】:

  • 您使用什么 API 从 Python 中执行 SQL?你能在这里分享一些代码吗?
  • 你想把变量放在哪里?
  • 我想让它选择 DogID 与保存在我的变量中的那个相同的位置

标签: python sql


【解决方案1】:

python中字符串格式化的小例子:

sql1 = '''SELECT * {0}
FROM {1} INNER JOIN {2}
ON {1}.{3} = {2}.{3}
Order By {4} desc;
'''

print(sql1.format('Spot','Dogs', 'Owners', 'DogID', 'Speed'))

【讨论】:

    【解决方案2】:

    您可以像这样在 SQL 数据库中搜索:

    import sqlite3
    
    db = sqlite3.connect('db.sq3')
    cursor = db.cursor()
    
    to_search = ('value', )
    found = cursor.execute('SELECT * FROM table WHERE key=?', to_search).fetchall()
    

    【讨论】:

    • @Serge:已更正。
    【解决方案3】:

    Python 手册应该是主要的信息来源。标准库直接提供了 Sqlite 接口和很好的例子。

    一个例子就是这样:

    # Never do this -- insecure!
    symbol = 'RHAT'
    c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
    
    # Do this instead
    t = ('RHAT',)
    c.execute('SELECT * FROM stocks WHERE symbol=?', t)
    print c.fetchone()
    

    使用您自己的代码,它会给出:

    sql1 = '''SELECT *
    FROM Dogs INNER JOIN Owners
    ON Dogs.DogID = Owners.DogID
    WHERE Dogs.DogID = ?
    Order By Speed desc;
    '''
    c.execute(sql1, dogid)
    ...
    

    【讨论】:

    • 我在指定上面的变量时收到一条错误消息,然后使用你所说的显然它使用 1 个绑定但提供了 7 个
    • @BenDent DogID 是 7 个字符的字符串吗?那么您很可能忘记将其作为 1 元组提供,即。 c.execute(sql1, (dogid,)).
    猜你喜欢
    • 2019-01-17
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多