python - 如何将数据类型从整数转换为文本?

标签 python sqlite

对于一列情况,重复的问题及其答案显示在: Parameter substitution for a SQLite "IN" clause

我想将 oldTableColAColB 中的数据复制到 newTable 中。 oldTable 中的 ColAColB 的数据类型为 INTEGER

通过复制数据,我还想检查 ColA 或 ColB 是否是字符串的一部分(在本例中为 TextTemp)。

我的问题是:ColAColB的数据类型为INTEGER,而TextTempTEXT 格式。不同数据类型无法比较。

因此问题是:如何将 ColAColB 中的数据从 INTEGER 转换为 TEXT

这是我的 Python 代码。应复制 ColA 或 ColB 中的 15、3、44 和 9。

TextTemp = "15 3 44 9"  #String format, but all numbers, with empty spaces
TextTemp = "15 3 44 9".split() #Convert TextTemp into TEXT format
cur.execute('''CREATE TABLE newTable AS  
             SELECT * FROM oldTable 
             WHERE ColA IN (%s)
             OR ColB IN (%s)''' % 
             (','.join('?'*len(TextTemp)), TextTemp)
             (','.join('?'*len(TextTemp)), TextTemp))

错误消息:TypeError:格式字符串参数不足

我很确定上面的代码非常接近最终的正确版本,但我只是不知道如何更改它。

PS:我无法使用for循环,所以请帮我解决上述方法中的问题。

最佳答案

最简单的方法是在 cur.execute 之外为查询创建占位符。 您的两个 in 查询都需要 n 个逗号分隔的问号。

>>> to_find = "15 3 44 9"  # String format, but all numbers, with empty spaces
>>> to_find = to_find.split() # Convert TextTemp into TEXT format
>>> to_find
['15', '3', '44', '9']
>>> placeholders = ','.join('?' * len(to_find))
>>> placeholders
'?,?,?,?'

然后我们填写查询。我将使用 .format 而不是旧式格式,因为使用新式格式可以更轻松地多次替换相同的值:

>>> query = '''CREATE TABLE newTable AS  
               SELECT * FROM oldTable 
               WHERE ColA IN ({0})
               OR ColB IN ({0})'''.format(placeholders)
>>> print(query)
CREATE TABLE newTable AS  
               SELECT * FROM oldTable 
               WHERE ColA IN (?,?,?,?)
               OR ColB IN (?,?,?,?)

由于每个 ? 都绑定(bind)到参数列表中的不同参数,并且我们现在有 2 * n 占位符,因此我们还需要复制替换值,因此 tofind * 2:

>>> to_find * 2
['15', '3', '44', '9', '15', '3', '44', '9']
>>> cur.execute(query, to_find * 2)

这是最终紧凑形式的代码

to_find = to_find.split()
placeholders = ','.join('?' * len(to_find))
query = '''CREATE TABLE newTable AS  
           SELECT * FROM oldTable 
           WHERE ColA IN ({0})
           OR ColB IN ({0})'''.format(placeholders)
cur.execute(query, to_find * 2)

关于python - 如何将数据类型从整数转换为文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570875/

相关文章:

Python 列表与数组——何时使用?

ruby-on-rails - 使用 SQLite 作为生产数据库,坏主意但是

sqlite - SQLite/FoxPro更新无法使用=查找记录,但可以使用LIKE查找记录

python - Django rest framework/simplejson 错误 __init__() 得到了一个意外的关键字参数

python - 在 Pandas eval 中调用 round()、ceiling()、floor()、min()、max()

python - 将多个wx.EVT_MENU绑定(bind)到同一个方法?

batch-file - 批处理无法在if语句中获取值(value)

c++ - 在调用 sqlite3_step() 之前我没有记录计数,如何在二维字符串数组中填充记录?

sql - 只选择SQL中一列中重复值的第一行

Python Mechanize 模块加密