导航:首页 > 编程语言 > python跨库查表

python跨库查表

发布时间:2022-05-23 15:48:22

python 微信怎么查询数据库表内所有内容

我常用pymssql连接M$SQL服务器, 没用过pyodbc, 但按理应该都差不多。
若用pymssql, 从数据库中取数据的过程如下:

import pymssql

connect_setting = {
'host': '127.0.0.1',
'user': 'sa',
'password': '',
'database': 'master',
'charset': 'gb18030'
}

conn = pymssql.connect(**connect_setting)
curr = conn.cursor()
curr.execute("select list, name from nlist")
result = [(lst, name) for lst, name in curr]
curr.close()
conn.close()

关于"如何查询,list的每个值在数据库中对应的Name“
若库表中的数据像下面的样子:
id, name:
1, 'python'
2, 'perl'
3, 'c'
4, 'java'
且每行id是唯一值, 将从数据库表中拿到的数据放到一个字典中:
curr.execute("select id, name from nlist")
dd = dict([(id, name) for id, name in curr])

lst = [1,2,3,4,5,6]
用dd进行转换
[(i, dd.get(i)) for i in lst]
==>
[(1, 'python'), (2, 'perl'), (3, 'c'), (4, 'java'), (5, None), (6, None)]

or

[dd.get(i, i) for i in lst]
==>
['python', 'perl', 'c', 'java', 5, 6]

Ⅱ 如何在python程序中查看sqlite3某数据库中的表名

sqlite3数据库里表的信息存储在了一个名为sqlite_master的表中

因此可以通过这条语句来查看数据库中所有表的名称

SELECT name FROM sqlite_master WHERE type='table';

下面是Python的用法

con=sqlite3.connect('database.db')
cursor=con.cursor()
cursor.execute("SELECTnameFROMsqlite_masterWHEREtype='table';")
print(cursor.fetchall())

Ⅲ python如何自动获取oracle数据库中所有表的表结构

你看你怎么调用这个sql语句吧

selecta.owner所属用户,
a.table_name表名,
a.column_name字段名,
a.data_type字段类型,
a.字段长度,
a.字段精度,
a.是否为空,
a.创建日期,
a.最后修改日期,
casewhena.owner=d.owneranda.table_name=d.table_nameanda.column_name=d.column_namethen'主键'else''end是否主键
from
(selecta.owner,a.table_name,b.column_name,b.data_type,casewhenb.data_precisionisnullthenb.data_lengthelsedata_precisionend字段长度,data_scale字段精度,
decode(nullable,'Y','√','N','×')是否为空,c.created创建日期,c.last_ddl_time最后修改日期
fromall_tablesa,all_tab_columnsb,all_objectsc
wherea.table_name=b.table_nameanda.owner=b.owner
anda.owner=c.owner
anda.table_name=c.object_name
anda.owner='SCOTT'--这个是查某个用户,你到时候把用户名换一下就好,一定大写
andc.object_type='TABLE')a
leftjoin
(selecta.owner,a.table_name,a.column_name,a.constraint_namefromuser_cons_columnsa,user_constraintsb
wherea.constraint_name=b.constraint_nameandb.constraint_type='P')d
ona.owner=d.owneranda.table_name=d.table_nameanda.column_name=d.column_name
orderbya.owner,a.table_name;

Ⅳ 如何用python操作数据库表

创建一个表并且插入数据

# -*- coding: UTF-8 -*-
import MySQLdb as mdb
import sys
#将con设定为全局连接
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#获取连接的cursor,只有获取了cursor,我们才能进行各种操作
cur = con.cursor()
#创建一个数据表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS \
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
#以下插入了5条数据
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

Ⅳ python怎么处理数据库查询的记录

python数据处理numpy和pandas插件,可以使用pip命令进行安装,也可以用excel插件进行简单处理数据,图像显示一般用matplotion,也是一个插件,
import nump as np
import pandas as pd
进行引用

Ⅵ 可不可以在不同的linux机器上用几个python脚本同时访问一个mysql数据库并操作同一个表

可以的,冲突的问题可以搜索关键字

python mysql transaction

参考:
http://stackoverflow.com/questions/12378227/mysqldb-with-multiple-transaction-per-connection

Ⅶ python怎么链接多实例数据库

你可以访问Python数据库接口及API查看详细的支持数据库列表。不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:

引入 API 模块。
获取与数据库的连接。
执行SQL语句和存储过程。
关闭数据库连接。

什么是MySQLdb?

MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

如何安装MySQLdb?

为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。复制以下代码,并执行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:
Traceback (most recent call last):
File "test.py", line 3, in <mole>
import MySQLdb
ImportError: No mole named MySQLdb

安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python ,(Linux平台可以访问:https://pypi.python.org/pypi/MySQL-python)从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。
如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

注意:请确保您有root权限来安装上述模块。

数据库连接

连接数据库前,请先确认以下事项:

您已经创建了数据库 TESTDB.
在TESTDB数据库中您已经创建了表 EMPLOYEE
EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
在你的机子上已经安装了 Python MySQLdb 模块。
如果您对sql语句不熟悉,可以访问我们的 SQL基础教程

实例:

以下实例链接Mysql的TESTDB数据库:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

执行以上脚本输出结果如下:
Database version : 5.0.45

创建数据库表

如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

数据库插入操作

以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# Rollback in case there is any error
db.rollback()

# 关闭数据库连接
db.close()

以上例子也可以写成如下形式:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()

# 关闭数据库连接
db.close()

实例:

以下代码使用变量向SQL语句中传递参数:
..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................

数据库查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall():接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

实例:

查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fecth data"

# 关闭数据库连接
db.close()

以上脚本执行结果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000

数据库更新操作

更新操作用于更新数据表的的数据,以下实例将 TESTDB表中的 SEX 字段全部修改为 'M',AGE 字段递增1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = '%c'" % ('M')
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()

# 关闭数据库连接
db.close()

删除操作

删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()

# 关闭连接
db.close()

执行事务

事务机制可以确保数据一致性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(rability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

Ⅷ python常用到哪些库

Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类库,Python在各个领域都能发挥巨大的作用。
下面我们就来看一下python中常用到的库:
数值计算库:
1. NumPy
支持多维数组与矩阵运算,也针对数组运算提供大量的数学函数库。通常与SciPy和Matplotlib一起使用,支持比Python更多种类的数值类型,其中定义的最重要的对象是称为ndarray的n维数组类型,用于描述相同类型的元素集合,可以使用基于0的索引访问集合中元素。
2. SciPy
在NumPy库的基础上增加了众多的数学、科学及工程计算中常用的库函数,如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等,可进行插值处理、信号滤波,以及使用C语言加速计算。
3. Pandas
基于NumPy的一种工具,为解决数据分析任务而生。纳入大量库和一些标准的数据模型,提供高效地操作大型数据集所需的工具及大量的能快速便捷处理数据的函数和方法,为时间序列分析提供很好的支持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。
数据可视化库:
4. Matplotlib
第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。
5. Seaborn
利用了Matplotlib,用简洁的代码来制作好看的图表。与Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感。
6. ggplot
基于R的一个作图库ggplot2,同时利用了源于《图像语法》(The Grammar of Graphics)中的概念,允许叠加不同的图层来完成一幅图,并不适用于制作非常个性化的图像,为操作的简洁度而牺牲了图像的复杂度。
7. Bokeh
跟ggplot一样,Bokeh也基于《图形语法》的概念。与ggplot不同之处为它完全基于Python而不是从R处引用。长处在于能用于制作可交互、可直接用于网络的图表。图表可以输出为JSON对象、HTML文档或者可交互的网络应用。
8. Plotly
可以通过Python notebook使用,与Bokeh一样致力于交互图表的制作,但提供在别的库中几乎没有的几种图表类型,如等值线图、树形图和三维图表。
9. pygal
与Bokeh和Plotly一样,提供可直接嵌入网络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成方法,且默认的风格也很漂亮,用几行代码就可以很容易地制作出漂亮的图表。
10. geoplotlib
用于制作地图和地理相关数据的工具箱。可用来制作多种地图,比如等值区域图、热度图、点密度图。必须安装Pyglet(一个面向对象编程接口)方可使用。
11. missingno
用图像的方式快速评估数据缺失的情况,可根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图对数据进行修正。
web开发库:
12. Django
一个高级的Python Web框架,支持快速开发,提供从模板引擎到ORM所需的一切东西,使用该库构建App时,必须遵循Django的方式。
13. Socket
一个套接字通讯底层库,用于在服务器和客户端间建立TCP或UDP连接,通过连接发送请求与响应。
14. Flask
一个基于Werkzeug、Jinja 2的Python轻量级框架(microframework),默认配备Jinja模板引擎,也包含其他模板引擎或ORM供选择,适合用来编写API服务(RESTful rervices)。
15. Twisted
一个使用Python实现的基于事件驱动的网络引擎框架,建立在deferred object之上,一个通过异步架构实现的高性能的引擎,不适用于编写常规的Web Apps,更适用于底层网络。
数据库管理:

16. MySQL-python
又称MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架也基于此库进行开发。只支持Python 2.x,且安装时有许多前置条件。由于该库基于C语言开发,在Windows平台上的安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代品为衍生版本。
17. mysqlclient
完全兼容MySQLdb,同时支持Python 3.x,是Django ORM的依赖工具,可使用原生SQL来操作数据库,安装方式与MySQLdb一致。
18. PyMySQL
纯Python实现的驱动,速度比MySQLdb慢,最大的特点为安装方式简洁,同时也兼容MySQL-python。
19. SQLAlchemy
一种既支持原生SQL,又支持ORM的工具。ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的一些损失。
自动化运维:
20. jumpsever跳板机
一种由Python编写的开源跳板机(堡垒机)系统,实现了跳板机的基本功能,包含认证、授权和审计,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap编写,界面美观,自动收集硬件信息,支持录像回放、命令搜索、实时监控、批量上传下载等功能,基于SSH协议进行管理,客户端无须安装agent。主要用于解决可视化安全管理,因完全开源,容易再次开发。
21. Mage分布式监控系统
一种用Python开发的自动化监控系统,可监控常用系统服务、应用、网络设备,可在一台主机上监控多个不同服务,不同服务的监控间隔可以不同,同一个服务在不同主机上的监控间隔、报警阈值可以不同,并提供数据可视化界面。
22. Mage的CMDB
一种用Python开发的硬件管理系统,包含采集硬件数据、API、页面管理3部分功能,主要用于自动化管理笔记本、路由器等常见设备的日常使用。由服务器的客户端采集硬件数据,将硬件信息发送至API,API负责将获取的数据保存至数据库中,后台管理程序负责对服务器信息进行配置和展示。
23. 任务调度系统
一种由Python开发的任务调度系统,主要用于自动化地将一个服务进程分布到其他多个机器的多个进程中,一个服务进程可作为调度者依靠网络通信完成这一工作。
24. Python运维流程系统
一种使用Python语言编写的调度和监控工作流的平台,内部用于创建、监控和调整数据管道。允许工作流开发人员轻松创建、维护和周期性地调度运行工作流,包括了如数据存储、增长分析、Email发送、A/B测试等诸多跨多部门的用例。
GUI编程:
25. Tkinter
一个Python的标准GUI库,可以快速地创建GUI应用程序,可以在大多数的UNIX平台下使用,同样可以应用在Windows和Macintosh系统中,Tkinter 8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
26. wxPython
一款开源软件跨平台GUI库wxWidgets的Python封装和Python模块,是Python语言的一套优秀的GUI图形库,允许程序员很方便地创建完整的、功能健全的GUI用户界面。
27. PyQt
一个创建GUI应用程序的工具库,是Python编程语言和Qt的成功融合,可以运行在所有主要操作系统上,包括UNIX、Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
28. PySide
一个跨平台的应用程式框架Qt的Python绑定版本,提供与PyQt类似的功能,并相容API,但与PyQt不同处为其使用LGPL授权。
更多Python知识请关注Python自学网。

Ⅸ python + django 多表联合查询方法求教

先让我们回忆一下在第五章里的关于书本(book)的数据模型:1fromdjango.dbimportmodelsclassPublisher(models.Model):name=models.CharField(max_length=30)address=models.CharField(max_length=50)city=models.CharField(max_length=60)state_province=models.CharField(max_length=30)country=models.CharField(max_length=50)website=models.URLField()def__unicode__(self):returnself.nameclassAuthor(models.Model):first_name=models.CharField(max_length=30)last_name=models.CharField(max_length=40)email=models.EmailField()def__unicode__(self):returnu'%s%s'%(self.first_name,self.last_name)classBook(models.Model):title=models.CharField(max_length=100)authors=models.ManyToManyField(Author)publisher=models.ForeignKey(Publisher)publication_date=models.DateField()def__unicode__(self):returnself.title如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。例如,要确定ID为50的书本的标题,我们这样做:>>>frommysite.books.modelsimportBook>>>b=Book.objects.get(id=50)>>>b.titleu'TheDjangoBook'但是,在之前有一件我们没提及到的是表现为ForeignKey或ManyToManyField的关联对象字段,它们的作用稍有不同。访问外键(ForeignKey)值当你获取一个ForeignKey字段时,你会得到相关的数据模型对象。例如:>>>b=Book.objects.get(id=50)>>>b.publisher>>>b.publisher.websiteu'http://www.apress.com/'对于用``ForeignKey``来定义的关系来说,在关系的另一端也能反向的追溯回来,只不过由于不对称性的关系而稍有不同。通过一个``publisher``对象,直接获取books,用publisher.book_set.all(),如下:>>>p=Publisher.objects.get(name='ApressPublishing')>>>p.book_set.all()[,,]实际上,book_set只是一个QuerySet(参考第5章的介绍),所以它可以像QuerySet一样,能实现数据过滤和分切,例如:1>>>p=Publisher.objects.get(name='ApressPublishing')>>>p.book_set.filter(name__icontains='django')[,]属性名称book_set是由模型名称的小写(如book)加_set组成的。访问多对多值(Many-to-ManyValues)多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。例如,这里是如何查看书籍的作者:>>>b=Book.objects.get(id=50)>>>b.authors.all()[,]>>>b.authors.filter(first_name='Adrian')[]>>>b.authors.filter(first_name='Adam')[]反向查询也可以。要查看一个作者的所有书籍,使用author.book_set,就如这样:>>>a=Author.objects.get(first_name='Adrian',last_name='Holovaty')>>>a.book_set.all()[,]这里,就像使用ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。更改数据库模式(DatabaseSchema)3在我们在第5章介绍syncdb这个命令时,我们注意到syncdb仅仅创建数据库里还没有的表,它并不对你数据模型的修改进行同步,也不处理数据模型的删除。如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改。这段将解释了具体怎么做:当处理模型修改的时候,将Django的数据库层的工作流程铭记于心是很重要的。如果模型包含一个未曾在数据库里建立的字段,Django会报出错信息。当你第一次用Django的数据库API请求表中不存在的字段时会导致错误(就是说,它会在运行时出错,而不是编译时)。3Django不关心数据库表中是否存在未在模型中定义的列。Django不关心数据库中是否存在未被模型表示的表格。1改变模型的模式架构意味着需要按照顺序更改Python代码和数据库。添加字段1当要向一个产品设置表(或者说是model)添加一个字段的时候,要使用的技巧是利用Django不关心表里是否包含model里所没有的列的特性。策略就是现在数据库里加入字段,然后同步Django的模型以包含新字段。3然而这里有一个鸡生蛋蛋生鸡的问题,由于要想了解新增列的SQL语句,你需要使用Django的manage.pysqlall命令进行查看,而这又需要字段已经在模型里存在了。(注意:你并不是非得使用与Django相同的SQL语句创建新的字段,但是这样做确实是一个好主意,它能让一切都保持同步。)3这个鸡-蛋的问题的解决方法是在开发者环境里而不是发布环境里实现这个变化。(你正使用的是测试/开发环境,对吧?)下面是具体的实施步骤。首先,进入开发环境(也就是说,不是在发布环境里):在你的模型里添加字段。运行manage.pysqlall[yourapp]来测试模型新的CREATETABLE语句。注意为新字段的列定义。开启你的数据库的交互命令界面(比如,psql或mysql,或者可以使用manage.pydbshell)。执行ALTERTABLE语句来添加新列。使用Python的manage.pyshell,通过导入模型和选中表单(例如,MyModel.objects.all()[:5])来验证新的字段是否被正确的添加,如果一切顺利,所有的语句都不会报错。3然后在你的产品服务器上再实施一遍这些步骤。启动数据库的交互界面。5执行在开发环境步骤中,第三步的ALTERTABLE语句。将新的字段加入到模型中。如果你使用了某种版本控制工具,并且在第一步中,已经提交了你在开发环境上的修改,现在,可以在生产环境中更新你的代码了(例如,如果你使用Subversion,执行svnupdate。重新启动Webserver,使修改生效。让我们实践下,比如添加一个num_pages字段到第五章中Book模型。首先,我们会把开发环境中的模型改成如下形式:classBook(models.Model):title=models.CharField(max_length=100)authors=models.ManyToManyField(Author)publisher=models.ForeignKey(Publisher)publication_date=models.DateField()**num_pages=models.IntegerField(blank=True,null=True)**def__unicode__(self):returnself.title

阅读全文

与python跨库查表相关的资料

热点内容
新手玩狼人杀用什么app 浏览:614
pdf在线查看 浏览:953
安卓tv90如何关闭后台 浏览:682
php读取word乱码 浏览:753
minicom源码 浏览:1000
海尔冷柜压缩机 浏览:415
联通服务器如何调试信号 浏览:135
stata新命令 浏览:940
单调栈算法python 浏览:605
微信解压游戏怎么下载 浏览:961
忍三服务器不同如何登上账号 浏览:821
php求积 浏览:295
封面命令 浏览:879
手机复制文件夹到另一个文件夹 浏览:992
手游为什么不能统一下服务器 浏览:246
iphone上pdf 浏览:884
window定时python脚本 浏览:64
怎么运行cmd命令行 浏览:367
php中类的继承 浏览:228
openvpnlinux安装配置 浏览:463