如何获取Sqlite3数据库上的列名列表?
我想将我的 iPhone 应用程序迁移到新的数据库版本。 由于我没有保存某些版本,因此我需要检查某些列名称是否存在。
这个Stackoverflow条目建议进行选择
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
并解析结果。
这是常见的方式吗? 备择方案?
I want to migrate my iPhone app to a new database version. Since I don't have some version saved, I need to check if certain column names exist.
This Stackoverflow entry suggests doing the select
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
and parse the result.
Is that the common way? Alternatives?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(25)
将为您提供所有列名称的列表。
will get you a list of all the column names.
如果你这样做,
你就会得到想要的结果。
If you do
you will get the desired result.
如果您有 sqlite 数据库,请使用 sqlite3 命令行程序和以下命令:
列出数据库中的所有表:
显示给定
表名
的架构:If you have the sqlite database, use the sqlite3 command line program and these commands:
To list all the tables in the database:
To show the schema for a given
tablename
:只是对于像我这样的超级菜鸟来说,想知道人们如何或什么意思“
你想使用它作为你的准备语句”,如下所示。 这样做会选择一个看起来像这样的表,只不过填充了与您的表相关的值。
其中 id 和 name 是列的实际名称。 因此,要获取该值,您需要使用以下方法选择列名称:
这将返回当前行的列名称。 要获取所有行或找到您想要的行,您需要遍历所有行。 最简单的方法是采用以下方式。
Just for super noobs like me wondering how or what people meant by
You want to use use that as your prepare statement as shown below. Doing so selects a table that looks like this except is populated with values pertaining to your table.
Where id and name are the actual names of your columns. So to get that value you need to select column name by using:
Which will return the current row's column's name. To grab them all or find the one you want you need to iterate through all the rows. Simplest way to do so would be in the manner below.
如果您希望查询的输出包含列名称并与列正确对齐,请在
sqlite3
中使用以下命令:您将获得如下输出:
If you want the output of your queries to include columns names and be correctly aligned as columns, use these commands in
sqlite3
:You will get output like:
获取此处未提及的跨平台且不依赖 sqlite3.exe shell 的列名列表的另一种方法是从 PRAGMA_TABLE_INFO() 表值函数中进行选择。
您可以通过查询来检查某个列是否存在:
如果您不想解析 select sql from sqlite_master 或 pragma table_info 的结果,则可以使用此方法。
请注意,此功能是实验性的,是在 SQLite 版本 3.16.0 (2017-01-02) 中添加的。
参考:
https://www.sqlite.org/pragma.html#pragfunc
An alternative way to get a list of column names not mentioned here that is cross platform and does not rely on the sqlite3.exe shell is to select from the PRAGMA_TABLE_INFO() table value function.
You can check if a certain column exists by querying:
This is what you use if you don't want to parse the result of select sql from sqlite_master or pragma table_info.
Note this feature is experimental and was added in SQLite version 3.16.0 (2017-01-02).
Reference:
https://www.sqlite.org/pragma.html#pragfunc
要获取列列表,您可以简单地使用:
To get a list of columns you can simply use:
我知道这是一个旧线程,但最近我需要相同的并找到了一个巧妙的方法:
I know it is an old thread, but recently I needed the same and found a neat way:
当您运行
sqlite3
cli 时,输入:也会给出所需的结果
When you run the
sqlite3
cli, typing in:will also give the desired result
下面这些命令可以设置列名:
然后,您可以获得如下所示的带有列名的结果:
并且,下面这些命令可以取消设置列名:
然后,您可以得到没有列名的结果,如下所示:
并且,这些命令下面可以显示命令
.headers
的详细信息:然后,可以显示命令
.headers
的详细信息,如下所示:另外,下面这个命令可以设置输出模式
box
:然后,您可以设置输出模式
box
,如下所示:并且,下面的此命令设置输出模式
table
:然后,您可以设置输出模式
table
如下所示:并且,这些命令可以显示命令的详细信息
.mode
:然后,您可以显示命令的详细信息
.mode
:最后,您可以使用
.help
显示命令.headers
和.mode
,如下所示:These commands below can set column names:
Then, you can get the result with column names as shown below:
And, these commands below can unset column names:
Then, you can get the result without column names as shown below:
And, these commands below can show the details of the command
.headers
:Then, you can show the details of the command
.headers
as shown below:In addition, this command below can set the output mode
box
:Then, you can set the output mode
box
as shown below:And, this command below sets the output mode
table
:Then, you can set the output mode
table
as shown below:And, these commands can show the details of the command
.mode
:Then, you can show the details of the command
.mode
:Lastly, you can show the commands
.headers
and.mode
with.help
as shown below:.schema table_name
这将列出数据库中表的列名称。
希望这会有所帮助!
.schema table_name
This will list down the column names of the table from the database.
Hope this will help!!!
这是一个老问题,但这里有一个替代答案,它检索 SQLite 数据库中的所有列,以及每列的关联表的名称:
这将返回这种类型的结果:
对于包含标识符和字符串的简单表内容。
This is an old question, but here is an alternative answer that retrieves all the columns in the SQLite database, with the name of the associated table for each column :
This returns this type of result:
For a simple table containing an identifier and a string content.
如果您正在搜索任何特定列,则可以使用 Like 语句,
例如:
you can use Like statement if you are searching for any particular column
ex:
为了获取列信息,您可以使用以下代码片段:
In order to get the column information you can use the following snippet:
.schema
当你在表内时,在 sqlite 控制台中
对我来说它看起来像这样......
.schema
in sqlite console when you have you're inside the table
it looks something like this for me ...
我知道为时已晚,但这会帮助其他人。
要查找表的列名,您应该执行
select * from tbl_name
,您将在sqlite3_stmt *
中获得结果。 并检查列迭代获取的总列。 请参考以下代码。这将打印结果集的所有列名称。
I know it's too late but this will help other.
To find the column name of the table, you should execute
select * from tbl_name
and you will get the result insqlite3_stmt *
. and check the column iterate over the total fetched column. Please refer following code for the same.This will print all the column names of the result set.
获取表和列的列表作为视图:
Get a list of tables and columns as a view:
我能够使用一个 SQL 查询检索具有相应列的表名,但列输出以逗号分隔。 我希望它能帮助别人
I was able to retrieve table names with corresponding columns by using one sql query, but columns output is comma separated. I hope it helps somebody
对于在Python中与sqlite3一起使用
最佳答案
PRAGMA table_info()
返回一个元组列表,这可能不会适合进一步处理,例如:在Python中使用sqlite3时,只需在末尾添加一个列表理解即可过滤掉不需要的信息。
结果
免责声明:请勿在生产中使用,因为此代码段可能会受到 SQL 注入!
For use in Python with sqlite3
Top answer
PRAGMA table_info()
returns a list of tuples, which might not be suitable for further processing, e.g.:When using sqlite3 in Python, simply add a list comprehension in the end to filter out unwanted information.
Result
DISCLAIMER: Do not use in production as this snippet is subject to possible SQL injection!
如果您使用的是 SQLite3,则不支持 INFORMATION_SCHEMA。 请改用 PRAGMA table_info。 这将返回有关该表的 6 行信息。 要获取列名称 (row2),请使用如下所示的 for 循环
If you're using the SQLite3, INFORMATION_SCHEMA is not supported. Use PRAGMA table_info instead. This will return 6 rows of information about the table. To fetch the column name (row2), use a for loop like the following
我在其他地方没有看到过这个,但它似乎对我们有用:
SELECT * FROM PRAGMA_table_list t JOIN PRAGMA_table_info(t.Name) c
I've not seen this elsewhere, but it seems to work for us:
SELECT * FROM PRAGMA_table_list t JOIN PRAGMA_table_info(t.Name) c