提问人:Nik 提问时间:11/11/2023 更新时间:11/11/2023 访问量:25
(蟒蛇SQLite)从 1 个特定列中选择要在变量中使用的数据?
(Python SQLite) Select data from 1 specific column to use in a variable?
问:
我正在数据库中存储数据,并想从一列中检索数据,但我只从一个单元格中获取数据,但是它用 .fetchone() 吐出的数据显示为:(TheData, )。
我正在使用 aiosqlite,它是 sqlite 的异步库。
db = await aiosqlite.connect('main.sqlite')
c = await db.cursor()
await c.execute(f"SELECT modchannel FROM sconfig WHERE guild_id = {ctx.guild.id}")
sresult = await c.fetchone()
print(sresult)
这是加载我的主数据库,查看我拥有的 sconfig 表,例如:
guild_id | modchannel(模组通道) |
---|---|
12345 | 随机数据 |
67890 | 更多数据 |
现在,这段代码可以工作,它确实从我想要的行中选择了我想要的正确列,但它抓取了数据(比如说从 12345 的行中),这将是这个伪情况:RandomData 但是当存储在变量中时,它显示为:('RandomData',)
目前,我一直在做以下工作来剥离数据周围的东西:
result = "".join(map(str, sresult))
然后设置一个新变量“结果”,数据如下所示: RandomData 看起来是一个很好的解决方案,但我确信这不是选择单个单元格数据的正确方法,必须有一种方法可以获取该数据而无需使用连接映射,因为其他数据类型将来可能会因为这种方法而变得混乱。
我想尽快存储日期/时间数据,我担心连接映射在从单元格中取出数据以在变量中使用时可能会破坏该数据。
我对数据库非常陌生,所以任何帮助都是值得赞赏的,我希望我的例子能解释我的问题。 哦,我看到资源说选择将数据存储在元组中,所以我需要遍历值等,但我正在使用异步,不确定是否有办法与我正在使用的库异步做到这一点,并希望可能有一种简单的方法来查询数据库以仅返回一个数据单元格, 因为这就是我所要求的,而不是一行数据或列列表。
答:
更新好吧,我想我可能真的解决了我自己的问题,但我欢迎其他人的任何其他反馈。
我现在所做的是分配row_factory以便索引(正确的术语?)所有结果(即使它在技术上是一个,但 python 将每个输出视为元组),然后我可以从中分配一个变量。
这样:
db = await aiosqlite.connect('main.sqlite')
db.row_factory = aiosqlite.Row
c = await db.cursor()
await c.execute(f"SELECT modchannel FROM sconfig WHERE guild_id = {ctx.guild.id}")
sresult = await c.fetchone()
print(sresult) #Still prints the tuple, so it shows: **('RandomData',)**
print(f"TEST: {sresult['modchannel']}") #Prints: RandomData
test = sresult['modchannel'] #Assigns RandomData as a string to test variable
print(f'TEST VARIABLE: {test}') #Test variable only contains the data: RandomData
所以这比我的 joinmap 解决方案效果更好。
评论